GitHub의 사용하기 쉬운 명령줄 도구: "gh"!

GitHub를 사용하고 GUI에서 복잡한 문제 없이 모든 작업을 수행하기 위해 나와 같은 명령줄을 선호한다면 GitHub가 "gh"라는 그리 새로운 도구를 활용하기 시작한 방법을 알아차렸을 것입니다. 결국 유망해 보였기 때문에 한번 시도해 보기로 결정했습니다. 그리고 개인적으로 너무 마음에 들어서 기사로 쓰고 싶었어요!

하지만 시작하기 전에 이 기사에서 사용할 몇 가지 용어를 설명해야 합니다.

"GH"는 "를 의미합니다.GitH어브”. 도구 이름도 여기서 유래되었으므로 Git 자체와 혼동할 수 없습니다. 일반적으로 수행되는 작업을 설명하기 위해 저장소를 생성, 포크, 삭제, 찾아볼 수 있습니다. 풀 요청 생성 그리고 더 많은. 기능을 찾을 수 없지만 터미널을 떠나고 싶지 않은 경우 GitHub에서 페이지를 탐색할 수 있는 텍스트 기반 브라우저도 제공됩니다.

"CLI"는 "를 의미합니다.C옴 만드 LI인터페이스”. 해당 터미널(또는 Windows에서는 명령 프롬프트)이 그 중 하나입니다. 앱 이름 옆에 "CLI"가 추가된 경우(이 문서에서는 "Git CLI") 앱이 터미널을 통해서만 실행된다는 의미입니다. 그리고 이 맥락에서 "Git CLI"는 우리가 알고 있는 Git입니다. 커밋이나 리베이스를 수행하는 명령과 같습니다.

GUI는 “G그래픽 U참조 Ininterface”이고 이것이 우리가 “탐색”하는 인터페이스입니다. 더 좋게 말하자면, 일반적으로 데스크탑 환경은 GUI입니다.

"API 키"는 서비스에 인증하는 데 사용하는 일종의 비밀 문자열/파일입니다. 인증할 때 2단계 인증 등을 우회한다는 점에 유의하세요. 그러므로 다른 수단으로는 접근할 수 없는 곳에 안전하게 보관하십시오.

우선, 이 도구는 무엇입니까? Git CLI를 통해 수행하는 작업을 어떻게 처리합니까?

“gh”는 오픈 소스로 간주될 수 있습니다(소스 코드) 작업을 완료하기 위해 Git CLI 자체와 GitHub API를 활용하는 래퍼입니다. 실제로, 사용하는 Git 명령에 매개변수를 전달할 수도 있습니다! 나중에 이에 대해 다루겠습니다.

설치 및 설정

다음을 사용하여 설치를 진행한다는 점을 명심하세요. 터먹스. 그러나 절차는 Debian 기반 배포판에서 할 수 있는 것과 거의 동일해야 합니다. 예를 들어 Ubuntu는 공식 저장소에 있습니다. Windows의 경우 CygWin이나 WSL이 필요하다고 생각합니다. ̅\_(ツ)_/̅

# 먼저 도구를 설치해 봅시다. 또한 gh의 백엔드이므로 Git을 설치합니다. $ pkg install git gh -y # 그런 다음 모든 작업에 앞서 인증이 필요합니다. # 이렇게 하면 도구의 데이터베이스에 새 API 키가 저장되므로 # 다시 인증할 필요가 없습니다. GITHUB_TOKEN을 이미 설정한 경우에는 작동하지 않으므로 먼저 설정을 해제하세요. :) $ gh 인증 로그인

이제 여기서 계속하기 전에 몇 가지 사항을 지적해야 합니다.

  • 첫째, "GitHub Enterprise Server"를 선택하지 마세요 자체 호스팅 GitHub가 없는 경우.
  • 두 번째로, GitHub 계정에 공개 키가 추가된 경우 HTTPS 대신 SSH를 사용하세요. API 키를 분실한 경우 적어도 SSH 키는 잃지 않으므로 좋은 대체 방법이 될 수 있습니다.
  • 셋째, 브라우저로 로그인을 선택하십시오 API 키가 없는 경우에만 가능합니다! 실제로, 이미 키가 있는 동안 다른 키를 갖는 것은 의미가 없습니다.

설정이 완료되면 Git CLI에 이에 대해 알려줍니다.

$ gh 인증 설정-git

이렇게 하면 반사 신경이 끼어들어 GH 대신 Git을 사용하게 되는 경우를 대비해 필요한 Git CLI 구성이 만들어집니다.

몇 가지 기본 명령

이제 GH를 설정했으므로 몇 가지 기본 명령을 스토리 기반으로 가르쳐 보겠습니다.

우선 내 로컬 매니페스트 저장소에 대한 끌어오기 요청을 생성한다고 가정해 보겠습니다. 먼저 포크하고 싶습니다.

$ gh repo 포크 windowz414/platform_manifest ! windowz414/platform_manifest가 이미 존재합니까? 포크를 복제하시겠습니까? 예 'platform_manifest'로 복제하는 중... 원격: 개체 열거 중: 136, 완료되었습니다. 원격: 개체 계산 중: 100%(136/136), 완료되었습니다. 원격: 개체 압축 중: 100%(81/81), 완료되었습니다. 원격: 총 136(델타 46), 재사용 89(델타 12), 팩 재사용 0 개체 수신: 100%(136/136), 30.70 KiB | 166.00KiB/s, 완료되었습니다. 델타 해결: 100%(46/46), 완료되었습니다. 업스트림 업데이트 github.com에서:windowz414/platform_manifest * [새 분기] amyrom/rosie -> upstream/amyrom/rosie * [새 분기] aosp-eleven -> upstream/aosp-eleven * [새 분기] aosp-ten -> upstream/aosp-ten * [새 분기] arrow-11.0 -> upstream/arrow-11.0 * [새 분기] cm-14.1 -> upstream/cm-14.1 * [새 분기] dot11 -> upstream/dot11 * [새 분기] ] e/os/v1-nougat -> upstream/e/os/v1-nougat * [새 분기] liquid-11 -> upstream/fluid-11 * [새 분기] fox_7.1 -> upstream/fox_7.1 * [새 브랜치] hentai-rika -> upstream/hentai-rika * [새 브랜치] ion-pie -> upstream/ion-pie * [새 브랜치] lineage-15.1 -> upstream/lineage-15.1 * [새 브랜치] lineage -17.1 -> upstream/lineage-17.1 * [새 브랜치] lineage-18.1 -> upstream/lineage-18.1 * [새 브랜치] lineage-18.1_teos -> upstream/lineage-18.1_teos * [새 브랜치] lineage-19.0 - > upstream/lineage-19.0 * [새 브랜치] 메인 -> upstream/main * [새 브랜치] mkn-mr1 -> upstream/mkn-mr1 * [새 브랜치] Revengeos-r11.0 -> upstream/revengeos-r11.0. 1 * [새 브랜치] stellar-S1 -> upstream/stellar-S11 * [새 브랜치] teos-n -> upstream/teos-n * [새 브랜치] weebprojekt-11 -> upstream/weebprojekt-XNUMX ✓ 복제된 포크

그런 다음 "wz414-labs"라는 실험을 위한 별도의 조직이 있고 아직 개인 프로필을 포크하지 않았으며 거기에서 복제한 다음 대신 거기를 통해 끌어오기 요청을 열고 싶다고 가정해 보겠습니다. 또한 "cm-14.1" 분기를 복제하여 git-checkout을 다시 수행할 필요가 없도록 하려고 합니다.

$ gh repo 포크 windowz414/platform_manifest --org="wz414-labs" -- --branch="cm-14.1" ✓ 포크 wz414-labs/platform_manifest 생성 ? 포크를 복제하시겠습니까? 예 'platform_manifest'로 복제하는 중... 원격: 개체 열거 중: 136, 완료되었습니다. 원격: 개체 계산 중: 100%(136/136), 완료되었습니다. 원격: 개체 압축 중: 100%(81/81), 완료되었습니다. 원격: 총 136(델타 46), 재사용 89(델타 12), 팩 재사용 0 개체 수신: 100%(136/136), 30.70 KiB | 120.00KiB/s, 완료되었습니다. 델타 해결: 100%(46/46), 완료되었습니다. 업스트림 업데이트 github.com에서:windowz414/platform_manifest * [새 분기] amyrom/rosie -> upstream/amyrom/rosie * [새 분기] aosp-eleven -> upstream/aosp-eleven * [새 분기] aosp-ten -> upstream/aosp-ten * [새 분기] arrow-11.0 -> upstream/arrow-11.0 * [새 분기] cm-14.1 -> upstream/cm-14.1 * [새 분기] dot11 -> upstream/dot11 * [새 분기] ] e/os/v1-nougat -> upstream/e/os/v1-nougat * [새 분기] liquid-11 -> upstream/fluid-11 * [새 분기] fox_7.1 -> upstream/fox_7.1 * [새 브랜치] hentai-rika -> upstream/hentai-rika * [새 브랜치] ion-pie -> upstream/ion-pie * [새 브랜치] lineage-15.1 -> upstream/lineage-15.1 * [새 브랜치] lineage -17.1 -> upstream/lineage-17.1 * [새 브랜치] lineage-18.1 -> upstream/lineage-18.1 * [새 브랜치] lineage-18.1_teos -> upstream/lineage-18.1_teos * [새 브랜치] lineage-19.0 - > upstream/lineage-19.0 * [새 브랜치] 메인 -> upstream/main * [새 브랜치] mkn-mr1 -> upstream/mkn-mr1 * [새 브랜치] Revengeos-r11.0 -> upstream/revengeos-r11.0. 1 * [새 브랜치] stellar-S1 -> upstream/stellar-S11 * [새 브랜치] teos-n -> upstream/teos-n * [새 브랜치] weebprojekt-11 -> upstream/weebprojekt-XNUMX ✓ 복제된 포크

보시다시피 저는 "-b cm-14.1"을 사용하지 않고 대신 긴 인수를 사용했습니다. 이 기사의 날짜인 16년 2022월 XNUMX일 현재 GH에는 Git CLI에 짧은 인수를 올바르게 전달하지 못하는 버그가 있으므로 대신 긴 인수로 수행해야 합니다.

이 작업이 완료되면 정기적으로 폴더에 들어가 변경 사항을 적용하고 커밋한 다음 푸시하고 끌어오기 요청을 수행할 준비가 됩니다. 이를 위해 필요한 것은 간단합니다.

$ gh pr create --branch="cm-14.1" wz414-labs:cm-14.1에 대한 풀 요청을 windowz14.1/platform_manifest의 cm-414에 생성 중입니까? 제목 teos: Git-Polycule로 변경 하시겠습니까? 몸 ? 무엇 향후 계획? https://github.com/windowz414/platform_manifest/pull/1 제출

“–branch=cm-14.1”을 추가하지 않으면 “main” 브랜치를 향한 PR을 생성하게 되며, 이는 올바르게 처리되지 않을 때 문제를 일으킬 것입니다.

이제 이 PR을 병합해야 합니다. 그렇죠? 그래서 먼저 저장소를 복제하고 할당된 분기로 체크아웃한 다음 먼저 PR을 나열합니다.

# 먼저 복제합니다. $ git clone https://github.com/windowz414/platform_manifest 'platform_manifest'로 복제 중... 원격: 개체 열거 중: 136, 완료. 원격: 개체 계산 중: 100%(136/136), 완료되었습니다. 원격: 개체 압축 중: 100%(81/81), 완료되었습니다. 원격: 총 136(델타 46), 재사용 89(델타 12), 팩 재사용 0 개체 수신: 100%(136/136), 30.70 KiB | 137.00KiB/s, 완료되었습니다. 델타 해결: 100%(46/46), 완료되었습니다. # 그럼 지점으로 가서 확인해 보세요. $ git checkout cm-14.1 분기 'cm-14.1'이 'origin/cm-14.1'을 추적하도록 설정되었습니다. 새로운 브랜치 'cm-14.1'로 전환되었습니다. # 이제 PR을 나열합니다. $ gh pr list windowz1/platform_manifest #1 teos에서 공개 끌어오기 요청 414개 중 1개 표시: Git-Polycule wz414-labs:cm-14.1로 변경

이제 원격을 "Git-Polycule"으로 변경하는 PR이 있음을 확인했으므로 변경된 내용을 살펴보겠습니다.

$ gh pr diff 1 diff --git a/teos.xml b/teos.xml index b145fc0..3aadeb6 100644 --- a/teos.xml +++ b/teos.xml @@ -2,7 +2,7, 414 @@ 

유망한 것 같습니다! 병합할 시간입니다!

$ gh pr 병합 1 ? 어떤 병합 방법을 사용하시겠습니까? 리베이스 및 병합? 무엇 향후 계획? 제출 ✓ 리베이스 및 병합된 풀 요청 #1(teos: Git-Polycule로 변경)

이제 병합했으므로 포크를 삭제할 수 있습니다.

$ gh repo delete --confirm wz414-labs/platform_manifest ✓ 삭제된 저장소 wz414-labs/platform_manifest

“–confirm” 매개변수를 전달했기 때문에 확인 요청 없이 바로 저장소를 삭제한 것을 볼 수 있습니다. 통과하지 못하면 다음과 같은 결과를 얻게 됩니다.

$ gh repo는 windowz414/systemd를 삭제합니까? 삭제를 확인하려면 windowz414/systemd를 입력하세요.

그리고 전체 저장소 이름을 입력해야 합니다. 시간 낭비…

요약

간단히 말해서 `gh`는 간단한 Git 작업과 GitHub API를 같은 지붕 아래에 통합하는 매우 단순화된 Git CLI/Curl 래퍼입니다. 어떻게 활용하시나요? 나에게 그러하듯이 당신에게도 유망해 보입니까? 당신의 의견을 기다리겠습니다!

관련 기사