#!if 넘어옴1 != null
'''gh'''{{{#!if 넘어옴2 != null
, ''''''}}}{{{#!if 넘어옴3 != null
, ''''''}}}{{{#!if 넘어옴4 != null
, ''''''}}}{{{#!if 넘어옴5 != null
, ''''''}}}{{{#!if 넘어옴6 != null
, ''''''}}}{{{#!if 넘어옴7 != null
, ''''''}}}{{{#!if 넘어옴8 != null
, ''''''}}}{{{#!if 넘어옴9 != null
, ''''''}}}{{{#!if 넘어옴10 != null
, ''''''}}}은(는) 여기로 연결됩니다.
#!if 설명 == null && 리스트 == null
{{{#!if 설명1 == null
다른 뜻에 대한 내용은 아래 문서를}}}{{{#!if 설명1 != null
{{{#!html 한국의 연예기획사}}}에 대한 내용은 [[GH엔터테인먼트]] 문서{{{#!if (문단1 == null) == (앵커1 == null)
를}}}{{{#!if 문단1 != null & 앵커1 == null
의 [[GH엔터테인먼트#s-|]]번 문단을}}}{{{#!if 문단1 == null & 앵커1 != null
의 [[GH엔터테인먼트#|]] 부분을}}}}}}{{{#!if 설명2 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단2 == null) == (앵커2 == null)
를}}}{{{#!if 문단2 != null & 앵커2 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단2 == null & 앵커2 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명3 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단3 == null) == (앵커3 == null)
를}}}{{{#!if 문단3 != null & 앵커3 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단3 == null & 앵커3 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명4 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단4 == null) == (앵커4 == null)
를}}}{{{#!if 문단4 != null & 앵커4 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단4 == null & 앵커4 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명5 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단5 == null) == (앵커5 == null)
를}}}{{{#!if 문단5 != null & 앵커5 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단5 == null & 앵커5 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명6 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단6 == null) == (앵커6 == null)
를}}}{{{#!if 문단6 != null & 앵커6 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단6 == null & 앵커6 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명7 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단7 == null) == (앵커7 == null)
를}}}{{{#!if 문단7 != null & 앵커7 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단7 == null & 앵커7 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명8 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단8 == null) == (앵커8 == null)
를}}}{{{#!if 문단8 != null & 앵커8 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단8 == null & 앵커8 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명9 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단9 == null) == (앵커9 == null)
를}}}{{{#!if 문단9 != null & 앵커9 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단9 == null & 앵커9 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명10 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단10 == null) == (앵커10 == null)
를}}}{{{#!if 문단10 != null & 앵커10 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단10 == null & 앵커10 != null
의 [[#|]] 부분을}}}}}}
#!if 설명 == null
{{{#!if 리스트 != null
다른 뜻에 대한 내용은 아래 문서를}}} 참고하십시오.
#!if 리스트 != null
{{{#!if 문서명1 != null
* {{{#!if 설명1 != null
한국의 연예기획사: }}}[[GH엔터테인먼트]] {{{#!if 문단1 != null & 앵커1 == null
문서의 [[GH엔터테인먼트#s-|]]번 문단}}}{{{#!if 문단1 == null & 앵커1 != null
문서의 [[GH엔터테인먼트#|]] 부분}}}}}}{{{#!if 문서명2 != null
* {{{#!if 설명2 != null
: }}}[[]] {{{#!if 문단2 != null & 앵커2 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단2 == null & 앵커2 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명3 != null
* {{{#!if 설명3 != null
: }}}[[]] {{{#!if 문단3 != null & 앵커3 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단3 == null & 앵커3 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명4 != null
* {{{#!if 설명4 != null
: }}}[[]] {{{#!if 문단4 != null & 앵커4 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단4 == null & 앵커4 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명5 != null
* {{{#!if 설명5 != null
: }}}[[]] {{{#!if 문단5 != null & 앵커5 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단5 == null & 앵커5 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명6 != null
* {{{#!if 설명6 != null
: }}}[[]] {{{#!if 문단6 != null & 앵커6 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단6 == null & 앵커6 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명7 != null
* {{{#!if 설명7 != null
: }}}[[]] {{{#!if 문단7 != null & 앵커7 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단7 == null & 앵커7 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명8 != null
* {{{#!if 설명8 != null
: }}}[[]] {{{#!if 문단8 != null & 앵커8 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단8 == null & 앵커8 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명9 != null
* {{{#!if 설명9 != null
: }}}[[]] {{{#!if 문단9 != null & 앵커9 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단9 == null & 앵커9 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명10 != null
* {{{#!if 설명10 != null
: }}}[[]] {{{#!if 문단10 != null & 앵커10 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단10 == null & 앵커10 != null
문서의 [[#|]] 부분}}}}}}
개발 | GitHub |
출시 | 2020년 9월 17일# |
안정 버전 | v2.71.2 (2025년 4월 25일)# |
언어 | Go(프로그래밍 언어) |
플랫폼 | Linux, macOS, Windows (i386, AMD64, ARM64, ARMHF) |
라이선스 | MIT 허가서 |
링크 | # |
1. 개요
Take GitHub to the command line
GitHub API를 이용하여 GitHub의 다양한 기능을 터미널 환경에서 접근할 수 있도록 하는 공식 명령줄 인터페이스.
2. 설치
빌드된 바이너리가 공식 저장소 릴리즈 페이지에 올라오며, Linux, Windows, macOS를 지원한다. BSD 계열은 공식 지원은 없지만 ports에서 쉽게 찾을 수 있다.Nix에서는 home-manager 모듈로 올라와 있다. extension을 일반적인 동적 라이브러리로 링크할 수 없어
programs.gh.extensions
에 미리 선언해야 한다.winget에
GitHub.cli
로 올라와 있다.3. 명령어
내부적으로 cobra 프레임워크를 사용하기 때문에## 주 명령어-서브커맨드 형태의 구조를 이루고 있다.명령어 | 서브커맨드 | 비고 |
코어 | ||
auth | ||
browse | ||
codespace | ||
gist | GitHub Gist 관련 명령어 | |
clone | ||
create | ||
delete | ||
edit | ||
list | 작성한 gist 및 ID를 표시한다. | |
rename | ||
view | gist의 description 및 개별 파일 이름과 내용을 차례로 표시한다. -f 플래그를 주어 하나의 파일만 선택해 출력할 수 있다. | |
issue | ||
org | list | 현재 로그인된 계정이 참여하고 있는 모든 organization을 나열한다. |
pr | create | 병합되지 않은 브랜치에서 ahead 변경사항을 대상으로 PR을 작성한다. .github 폴더 하위의 PR 템플릿을 사용하는 경우, vim 등의 에디터에서 body를 수정할 수 있다. |
list | ||
status | ||
checkout | ||
checks | ||
close | ||
comment | ||
diff | ||
edit | ||
lock | ||
merge | 선택한 PR을 머지한다. 웹 UI와 비슷하게 -r 로 리베이스를, -s 로 squash 머지를 할 수 있다. | |
ready | ||
reopen | ||
review | ||
unlock | ||
update-branch | ||
view | ||
project | ||
release | ||
repo | create | GitHub에 새 저장소를 생성한다. interactive한 프롬프트가 나와 웹 UI의 /new 페이지에서 진행하는 저장소 생성, README 추가, .gitignore 추가, remote 추가, 기존 히스토리 push 등의 과정을 한번에 진행할 수 있다. |
list | 특정 소유자(owner)가 소유하고 있는 모든 저장소를 보여주며, 아무 입력이 없다면 기본적으로 로그인한 사용자의 저장소들을 보여준다. | |
archive | 저장소를 아카이브한다. 파괴적 동작인 만큼 프롬프트 기본값이 N인데, 배치로 돌리고 싶으면 -y 를 주어야 한다. | |
autolink | ||
clone | 주어진 저장소를 로컬로 클론한다. GitHub의 저장소만 클론할 것을 가정하기 때문에 org/repo 형식의 깃허브 단축 경로를 사용할 수도 있으며, 자신이 소유한 저장소라면 소유자 경로를 생략할 수도 있다. 기본적으로 origin 리모트만 생성하는 git clone 과 다르게 포크한 저장소를 클론할 경우, 원본 리모트를 upstream 리모트로 자동 추가한다. 이 경우 PR을 보낼 때 웹 UI를 사용하지 않고 로컬에서 바로 보내는 것도 가능하다. 자세한 내용은 gh pr 명령어 참고. | |
delete | ||
deploy-key | ||
edit | ||
fork | 주어진 저장소를 포크한다. | |
gitignore | ||
license | ||
rename | ||
set-default | ||
sync | 포크가 있는 경우, upstream 리모트의 최신 커밋을 FF로 반영하고 변경된 사항을 origin에 자동으로 푸시한다. 이 경우 일반적으로 웹 UI에서 fork sync 버튼을 누르는 것과 비슷한 동작을 한다. 목표 저장소를 명시하는 경우, remote-to-remote로 싱크가 가능하다. | |
unarchive | 아카이브된 저장소를 아카이브 해제한다. | |
view | 저장소의 README 파일을 렌더한다. 링크를 브라우저에서 열고 싶을 경우 gh browse -R 을 사용해야 한다. | |
액션 | ||
cache | ||
run | ||
workflow | ||
기타 | ||
alias | ||
api | REST 엔드포인트 또는 GraphQL API를 사용하려면 api graphql 을 사용한다. 다른 HTTP 클라이언트를 사용해도 되지만 저장한 PAT가 없거나 인증 절차가 까다로운 경우, 깃헙 API를 터미널에서 간단히 테스트하거나 아예 API로 자동화하는 셸 스크립트를 짤 때 생각보다 유용하다. 다른 명령어와 같이 -q 플래그를 넣어 파이핑 없이도 jq를 사용할 수 있는데, JSON으로 긴 응답이 반환될 경우 유용하다. | |
attestation | ||
completion | ||
config | ||
extension | browse | |
create | ||
exec | ||
install | 주어진 저장소 주소로부터 확장을 설치한다. | |
list | 현재 설치된 확장 및 버전을 나열한다. | |
remove | 선택한 확장을 삭제한다. | |
search | ||
upgrade | ||
gpg-key | ||
label | ||
ruleset | ||
search | ||
secret | ||
ssh-key | ||
status | GitHub에서 현재 assign된 이슈 및 PR, 코드 리뷰, 외부 멘션 등등의 알림을 표시한다. | |
variable |
4. 특징
git cli와 다르게 GitHub 서비스 자체의 리소스(이슈, 액션 등) 관리 및 GitHub의 고유 워크플로(PR, 포크 등)와 관련된 작업에 관여한다. 간혹 있는 오해와 다르게 gh는 git의 superset이나 확장이 아니며 둘은 사용되는 용도와 목적이 분리되어 있어, 둘 다 같이 사용할 수 있다. 일반적으로 개발하면서 커밋 및 히스토리 관리, 브랜치 관리는 git cli로, PR 관리 등은 gh cli로 하게 된다.GitHub API에는 구현되어 있으나 gh 내장 명령어 자체로는 구현되지 않은 기능들이 다수 있다. 이 경우 관련 확장을 설치하여 해결할 수 있다.
5. 확장
*은 공식 확장(cli/
organization 하위)을 말한다.- gh-webhook*: 웹훅 관리 확장.
- dlvhdr/gh-dash: TUI 대시보드 확장. golang에서 자주 쓰이는 charm 엔진을 사용한다.
- seachicken/gh-poi: 머지된 브랜치 tidy 확장.
- rnorth/gh-combine-prs: 동시에 열린 상태인 복수 개의 PR을 병합해 하나의 PR로 재병합하는 확장. 기본적으로 내부적으로 임시 브랜치 하나에 나머지 모든 브랜치를 3way-merge하고 이를 가장 최신 새 PR로 새로 여는 방식으로, suqash나 리베이스가 아니다.
- mislav/gh-cp: scp와 비슷하게 깃헙 리모트에서 로컬로 개별 파일을 복사하는 명령어.
- jrnxf/gh-eco: TUI 프로필 대시보드.
- heaths/gh-label: 이슈 라벨 관리 확장.
- meiji163/gh-notify: GitHub 알림 인박스 확인 TUI.
- redraw/gh-install: release에 포함된 아티팩트 또는 빌드 결과물을 바로 설치할 수 있게 하는 확장.
- Link-/gh-token: PAT 또는 레거시 토큰 발급이 아니라, 사전 등록된 GitHub App을 통한 OAuth 인증으로 토큰을 일회성 발급할 수 있는 확장.
- mislav/gh-contrib: 흔히 잔디라 불리는 기여 빈도 그래프를 터미널에서 보여주는 확장.
- k1LoW/gh-grep: 클론하지 않은 저장소 파일을 대상으로 grep을 수행하는 확장.
- matt-bartel/gh-clone-org: 특정 organization에 속한 모든 저장소를 클론하는 스크립트.