• All Objects
    • Life
    • Technic
    • entry
  • Tags
  • docker
  • github
  • git
  • wsl2
  • go
Technic

GitHub CLI

2020. 7. 15. 23:51

Git을 처음 배울 때, 커맨드 라인에서 배워서 익숙해져있는 것도 있기도 하고, intelliJ를 쓰다보니, 내장된 Git 도구를 사용하기 때문에 UI 툴은 따로 설치하여 사용하지 않았습니다. 아 intelliJ를 사용하기 이전에는 sourceTree를 쓰기도 했었네요. GitHub 데스크탑이라는 GitHub에서 만든 툴도 있지만, 몇번 써보고는 사용하지 않았습니다. 기능이 좋고 나쁘고를 떠나서, 커맨드 라인에서 쓰는 게 딱히 불편하지 않았고, 개발하다가 다른 툴과 계속 왔다갔다하면서 작업하는게 귀찮았습니다. 그래서 intelliJ의 내장된 툴을 쓰거나, 터미널을 실행해서 커맨드 라인에서 Git을 사용하는게 편했습니다.

 

그런데 이런 제 마음을 GitHub에서 읽었는지, GitHub CLI( https://cli.github.com/ ) 툴이 올 초부터 베타로 운영되고 있었습니다. 처음엔 굳이 커맨드 라인툴이 필요할까 생각했지만, 커맨드 라인툴로 PR을 생성하거나 조회하거나 할 수 있다면, 브라우져 조차 띄울 필요가 없어진다면, 나름 괜찮지 않을까 싶어서 한번 살펴봤습니다. 

 

GitHub CLI는 Issue, PR, Repository, gist 그리고 api를 이용할 수 있습니다. Git관련 명령들의 조합은 건드리지 않고, 오직 GitHub과 인터페이스 하는 역할을 합니다. 그리고 그 외에 GitHub CLI를 사용자 입맛에 맞게 사용할 수 있도록 alias, completion, config 의 기능도 있습니다. 

 

GitHub ClI는 gh 명령으로 시작하고 뒤에 <command> <subcommand> 순으로 명령을 내립니다. 예를 들어 이슈의 상태를 조회하고 싶을 때는 이렇게 합니다. 

$ gh issue status

Issues assigned to you
  #8509 [Fork] Improve how Desktop handles forks  (epic:fork, meta)

Issues mentioning you
  #8938 [Fork] Add create fork flow entry point at commit warning  (epic:fork)
  #8509 [Fork] Improve how Desktop handles forks  (epic:fork, meta)

Issues opened by you
  #8936 [Fork] Hide PR number badges on branches that have an upstream PR  (epic:fork)
  #6386 Improve no editor detected state on conflicts modal  (enhancement)

그럼 하나하나 살펴 보도록 하겠습니다. 

 

Gist 

gist는 생성만 가능합니다. (현재는.. ) 기존에 만들었던 gist를 수정하거나, 조회하는 기능은 아직은 없습니다. 

$ gh gist create file [flags]

file은 파일 명을 직접 입력해도 되고, 비워둘 경우 표준 입력에서 입력 받을 수도 있습니다. [flag]에는 -d : gist에 대한 설명을 추가 -p 옵션을 추가하여 gist를 공개할 수 있습니다. ( 기본 설정은 비공개-private 입니다. ) 

 

Issue

GitHub에서 PR 다음으로 많이 사용하는 기능이 아닐까 싶은 Issue를 생성, 조회할 수 있는 기능입니다. Issue를 닫고, 조회하고 다시 열고 상태를 조회하고 내용을 볼 수 있는 기능을 제공합니다. ( 삭제는 제공하지 않습니다. ) 

# issue 닫기 
$ gh issue close issue_number 

# issue 생성 (옵션을 주지 않은 경우, 제목과 내용을 입력받음 
$ gh issue create
? Title My new issue
? Body [(e) to launch nano, enter to skip]

# 또는 브라우져를 실행시킬 수 있음. 
$ gh issue create --web 
Opening https://github.com/owner/repo/issues/new in your browser.

# issue 목록 조회
$ gh issue list

Issues for owner/repo

#14  Update the remote url if it changed  (bug)
#14  PR commands on a detached head       (enhancement)
#13  Support for GitHub Enterprise        (wontfix)
#8   Add an easier upgrade command        (bug)

# 닫힌 Issue 다시 열기
$ gh issue reopen issue_number

# Issue 상태보기 
$ gh issue status 

Issues assigned to you
  #8509 [Fork] Improve how Desktop handles forks  (epic:fork, meta)

Issues mentioning you
  #8938 [Fork] Add create fork flow entry point at commit warning  (epic:fork)
  #8509 [Fork] Improve how Desktop handles forks  (epic:fork, meta)

Issues opened by you
  #8936 [Fork] Hide PR number badges on branches that have an upstream PR  (epic:fork)
  #6386 Improve no editor detected state on conflicts modal  (enhancement)
  
# Issue 내용 보기 
gh issue view issue_number

       or 
       
gh issue view 21 --web  # 브라우져에서 이슈가 열림.

코딩 중에는 Issue번호를 기록해두지 않는 다는 점에서 불편할 수 있지만, List 조회시 Issue 번호를 알 수 있으므로 두 명령을 조합해서 사용하도록 해야 할 것 같습니다. 

 

PR 

PR 명령이 좀 유용해 보이는게 몇가지 있는데, 그 중하나 checkout 입니다. 

$ gh pr checkout 12
remote: Enumerating objects: 66, done.
remote: Counting objects: 100% (66/66), done.
remote: Total 83 (delta 66), reused 66 (delta 66), pack-reused 17
Unpacking objects: 100% (83/83), done.
From https://github.com/owner/repo
 * [new ref]             refs/pull/8896/head -> patch-2
M       README.md
Switched to branch 'patch-2'

12번 pr을 체크아웃하면, 해당 브랜치의 PR 소스를 클론하게 됩니다. 현재 올라온 PR 소스를 바로 확인할 수 있어서 활용가치가 높아 보입니다. 

 

그 외에 Issue와 동일하게 close, create, list, reopen, status, view의 기능을 제공하고, 

# PR에서 변경사항 확인
$ gh pr diff pr_number


# PR 병합( 머지커밋을 어떻게 만들건지 옵션으로 지정할 수도 있음. 머지 후 브랜치는 삭제됨으로 설정되어있음 )
$ gh pr merge pr_number

# PR에 대해 리뷰승인 커멘트를 전송. 
$ gh PR review pr_number --approve

 

REPO

리파지토리를 clone, create, fork, view 기능이 있습니다. 

# GitHub clone 
$ gh repo clone <repository>

# 생성 (GitHub에 리파지토리를 생성하고, remote에 설정을 추가함. 
$ gh repo create my-cool-project
✓ Created repository user/my-cool-project on GitHub
✓ Added remote https://github.com/user/my-cool-project.git

# fork 생성
$ gh repo fork [<repository>]

# 리파지토리 정보 보기 . 제목 리드미, Repo URI 를 보여줍니다. 
$ gh repo view [<repository>]

 

API 

API를 하려면, URL을 생성하여 응답을 받아 파싱하고 하는 과정이 필요해서 간단한 내용 조회같은 것을 할 때도 별도의 코드를 작성하곤했습니다. 그런데 CLI에서 바로 사용할 수 있다고 하니 편리해질 것 같습니다. 

# GitHub에서 리파지토리의 릴리즈를 조회. ( REST API )
$ gh api repos/:owner/:repo/releases

# GitHub에서 리파지토리의 릴리즈를 조회. ( GraphQL )
$ gh api graphql -F owner=':owner' -F name=':repo' -f query='
	query($name: String!, $owner: String!) {
		repository(owner: $owner, name: $name) {
			releases(last: 3) {
				nodes { tagName }
			}
		}
	}
'

 

아직은 Beta라서 기능이 조금은 부족해 보이는데, CLI에서 간단한 조회를 한다거나, 액션을 할 때 브라우져에 접근하지 않아도 할 수 있는데, 저의 귀찮음을 줄여줄 도구 중 하나가 될 것 같은 느낌입니다. 

반응형
copyright 2020. noname

티스토리툴바