GitHubovo orodje ukazne vrstice, ki je preprosto za uporabo: “gh”!

Če ste uporabljali GitHub in imate raje ukazno vrstico, tako kot jaz, da vse naredite brez kakršnih koli zapletov na GUI, ste morda opazili, kako je GitHub začel uporabljati svoje ne tako novo orodje, imenovano »gh«. Odločil sem se, da poskusim, ker je navsezadnje izgledalo obetavno. In meni osebno je bil zelo všeč – tako zelo, da sem hotel napisati članek o tem!

Preden pa začnemo, moram pojasniti nekaj izrazov, ki jih bom uporabil v tem članku.

"GH" pomeni "GitHub«. Od tod izvira tudi ime orodja, zato ga ni mogoče zamenjati s samim Gitom. Če želite pojasniti, kaj počne na splošno, lahko ustvarite, razcepite, izbrišete, brskate po skladiščih; ustvarjanje zahtev za vlečenje; in še veliko več. V primeru, da ne najdete funkcije, vendar tudi ne želite zapustiti terminala, ponuja tudi besedilni brskalnik za brskanje po straneh v GitHubu.

"CLI" pomeni "Cukaz Line Ivmesnik«. Ta terminal (ali v sistemu Windows ukazni poziv) je eden izmed njih. Če je poleg imena aplikacije dodan »CLI« (»Git CLI« za ta članek), to pomeni, da se aplikacija izvaja samo prek terminala. In "Git CLI" v tem kontekstu je, no, Git, ki ga poznamo. Kot ukaz, s katerim naredimo potrditve ali ponovne baze.

GUI pomeni "Grafično Uglej Interface« in je vmesnik, po katerem »krmarimo«. Bolje rečeno, namizno okolje je na splošno GUI.

»Ključ API« je neke vrste skrivni niz/datoteka, ki jo uporabljate za preverjanje pristnosti storitev. Pazite, da zaobide dvofaktorsko avtentikacijo in tako naprej, ko se z njo avtentikirate. Zato poskrbite, da bodo na varnem in nekje, ki je izven dosega z drugimi sredstvi.

Najprej, kaj je to orodje? Kako obravnava operacije, ki bi jih izvajali prek Git CLI?

»gh« lahko štejemo za odprtokodno (Source Code) ovoj, ki uporablja sam Git CLI in API-je GitHub za opravljanje stvari. Pravzaprav lahko celo posredujete parametre ukazom Git, ki jih uporablja! Tem se bom posvetil pozneje.

Namestitev in postavitev

Ne pozabite, da bom šel skozi namestitev z uporabo Termux. Toda postopek bi moral biti skoraj enak, kot bi ga lahko imeli na distribuciji, ki temelji na Debianu - Ubuntu ga ima na primer na svojih uradnih skladiščih. Za Windows potrebujete CygWin ali WSL. ¯\_(ツ)_/¯

# Najprej namestimo orodje. Nameščam tudi Git, ker je zaledje # za gh. $ pkg install git gh -y # Nato se moramo pred vsem potrditi. S tem boste shranili # nov ključ API v zbirko podatkov orodja, tako da vam ne bo treba # ponovno preverjati pristnosti. Če ste že nastavili GITHUB_TOKEN, to ne bo delovalo, zato ga # najprej počistite. :) $ gh auth prijava

Zdaj, preden nadaljujemo tukaj, moram poudariti nekaj stvari.

  • Prvič, ne izberite »GitHub Enterprise Server« če nimate neke vrste samostojnega GitHuba.
  • Drugič, uporabite SSH namesto HTTPS, če imate v računu GitHub dodan svoj javni ključ. Če izgubite ključ API, ne boste izgubili vsaj ključa SSH, tako da je lahko tudi dobra nadomestna metoda.
  • Tretjič, izberite prijavo z brskalnikom samo, če pri roki nimate ključa API! Resnično ne bi bilo smiselno imeti drugega ključa, medtem ko ga že imate.

Ko končate z nastavitvami, povejmo Git CLI o tem.

$ gh auth setup-git

To bo naredilo potrebne konfiguracije Git CLI za vsak primer, če vaši refleksi vdrejo in vas prisilijo k uporabi Git namesto GH.

Nekaj ​​osnovnih ukazov

Zdaj, ko ste nastavili GH, naj vas naučim nekaj osnovnih ukazov v osnovi zgodbe.

Najprej recimo, da želite ustvariti zahtevo za vlečenje za moj lokalni repo manifestov. Najprej ga želite razviti.

$ gh repo fork windowz414/platform_manifest! windowz414/platform_manifest že obstaja? Bi radi klonirali vilice? Da Kloniranje v 'platform_manifest'... oddaljeno: Naštevanje objektov: 136, opravljeno. oddaljeno: štetje predmetov: 100 % (136/136), končano. oddaljeno: Stiskanje predmetov: 100 % (81/81), končano. na daljavo: Skupaj 136 (delta 46), ponovno uporabljenih 89 (delta 12), paketno ponovno uporabljenih 0 Prejemni predmeti: 100 % (136/136), 30.70 KiB | 166.00 KiB/s, končano. Reševanje delt: 100 % (46/46), opravljeno. Posodabljanje navzgor Od github.com:windowz414/platform_manifest * [nova veja] amyrom/rosie -> navzgor/amyrom/rosie * [nova veja] aosp-eleven -> navzgor/aosp-eleven * [nova veja] aosp-ten -> upstream/aosp-ten * [nova veja] arrow-11.0 -> upstream/arrow-11.0 * [nova veja] cm-14.1 -> upstream/cm-14.1 * [nova veja] dot11 -> upstream/dot11 * [nova veja ] e/os/v1-nougat -> upstream/e/os/v1-nougat * [nova veja] fluid-11 -> upstream/fluid-11 * [nova veja] fox_7.1 -> upstream/fox_7.1 * [nova veja] hentai-rika -> upstream/hentai-rika * [nova veja] ion-pie -> upstream/ion-pie * [nova veja] lineage-15.1 -> upstream/lineage-15.1 * [nova veja] lineage -17.1 -> upstream/lineage-17.1 * [nova veja] lineage-18.1 -> upstream/lineage-18.1 * [nova veja] lineage-18.1_teos -> upstream/lineage-18.1_teos * [nova veja] lineage-19.0 - > upstream/lineage-19.0 * [nova veja] main -> upstream/main * [nova veja] mkn-mr1 -> upstream/mkn-mr1 * [nova veja] revengeos-r11.0 -> upstream/revengeos-r11.0. 1 * [nova veja] stellar-S1 -> upstream/stellar-S11 * [nova veja] teos-n -> upstream/teos-n * [nova veja] weebprojekt-11 -> upstream/weebprojekt-XNUMX ✓ Cloned fork

Potem pa recimo, da imate ločeno organizacijo za svoje poskuse, imenovano »wz414-labs«, ki je še niste odprli na svojem osebnem profilu in želite tam klonirati, nato pa tam namesto tega odpreti zahtevo za vleko. Prav tako želite klonirati vejo »cm-14.1«, da vam ne bo treba znova izvajati git-checkout zanjo.

$ gh repo fork windowz414/platform_manifest --org="wz414-labs" -- --branch="cm-14.1" ✓ Ustvarjen fork wz414-labs/platform_manifest? Bi radi klonirali vilice? Da Kloniranje v 'platform_manifest'... oddaljeno: Naštevanje objektov: 136, opravljeno. oddaljeno: štetje predmetov: 100 % (136/136), končano. oddaljeno: Stiskanje predmetov: 100 % (81/81), končano. na daljavo: Skupaj 136 (delta 46), ponovno uporabljenih 89 (delta 12), paket-ponovno uporabljenih 0 Prejemni predmeti: 100 % (136/136), 30.70 KiB | 120.00 KiB/s, končano. Reševanje delt: 100 % (46/46), opravljeno. Posodabljanje navzgor Od github.com:windowz414/platform_manifest * [nova veja] amyrom/rosie -> navzgor/amyrom/rosie * [nova veja] aosp-eleven -> navzgor/aosp-eleven * [nova veja] aosp-ten -> upstream/aosp-ten * [nova veja] arrow-11.0 -> upstream/arrow-11.0 * [nova veja] cm-14.1 -> upstream/cm-14.1 * [nova veja] dot11 -> upstream/dot11 * [nova veja ] e/os/v1-nougat -> upstream/e/os/v1-nougat * [nova veja] fluid-11 -> upstream/fluid-11 * [nova veja] fox_7.1 -> upstream/fox_7.1 * [nova veja] hentai-rika -> upstream/hentai-rika * [nova veja] ion-pie -> upstream/ion-pie * [nova veja] lineage-15.1 -> upstream/lineage-15.1 * [nova veja] lineage -17.1 -> upstream/lineage-17.1 * [nova veja] lineage-18.1 -> upstream/lineage-18.1 * [nova veja] lineage-18.1_teos -> upstream/lineage-18.1_teos * [nova veja] lineage-19.0 - > upstream/lineage-19.0 * [nova veja] main -> upstream/main * [nova veja] mkn-mr1 -> upstream/mkn-mr1 * [nova veja] revengeos-r11.0 -> upstream/revengeos-r11.0. 1 * [nova veja] stellar-S1 -> upstream/stellar-S11 * [nova veja] teos-n -> upstream/teos-n * [nova veja] weebprojekt-11 -> upstream/weebprojekt-XNUMX ✓ Cloned fork

Vidite, da nisem uporabil “-b cm-14.1” in namesto tega uporabil dolg argument. Od datuma tega članka, 16. februarja 2022, ima GH napako, da kratkih argumentov ne posreduje pravilno v Git CLI, zato je treba namesto tega narediti kot dolge argumente.

Ko je to opravljeno, ste redno vstopali v mapo, naredili svoje spremembe, jo potrdili in nato potisnili in ste pripravljeni izvesti zahtevo za vlečenje. Za to potrebujete le preprosto

$ gh pr create --branch="cm-14.1" Ustvarjanje vlečne zahteve za wz414-labs:cm-14.1 v cm-14.1 v windowz414/platform_manifest? Naslov teos: Change to Git-Polycule ? Telo ? Kaj je naslednje? Pošlji https://github.com/windowz414/platform_manifest/pull/1

Če ne dodate »–branch=cm-14.1«, bi ustvarili PR do »glavne« veje, kar bo seveda povzročilo težave, če se ne obravnava pravilno.

In zdaj moram združiti ta PR, kajne? Zato najprej kloniram repo, odjavim v dodeljeno podružnico in najprej navedem PR-je.

# Najprej kloniranje. $ git clone https://github.com/windowz414/platform_manifest Kloniranje v 'platform_manifest'... oddaljeno: Naštevanje objektov: 136, opravljeno. oddaljeno: štetje predmetov: 100 % (136/136), končano. oddaljeno: Stiskanje predmetov: 100 % (81/81), končano. na daljavo: Skupaj 136 (delta 46), ponovno uporabljenih 89 (delta 12), paketno ponovno uporabljenih 0 Prejemni predmeti: 100 % (136/136), 30.70 KiB | 137.00 KiB/s, končano. Reševanje delt: 100 % (46/46), opravljeno. # Nato odjava v podružnico. $ git checkout cm-14.1 veja 'cm-14.1' nastavljena za sledenje 'origin/cm-14.1'. Preklopil na novo vejo 'cm-14.1' # In zdaj seznam PR-jev. $ gh pr seznam Prikazuje 1 od 1 odprte zahteve za vlečenje v windowz414/platform_manifest #1 teos: Spremenite v Git-Polycule wz414-labs:cm-14.1

Zdaj, ko vidimo, da obstaja PR za spremembo daljinskega upravljalnika v »Git-Polycule«, poglejmo, kaj se je s tem spremenilo.

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

Zdi se obetavno! Čas za združitev!

$ gh pr spoji 1 ? Katero metodo spajanja želite uporabiti? Preoblikovati in združiti? Kaj je naslednje? Pošlji ✓ Ponovno zasnovana in združena vlečna zahteva št. 1 (teos: Spremeni v Git-Polycule)

Zdaj, ko sem ga združil, lahko izbrišete svojo vilico.

$ gh repo delete --confirm wz414-labs/platform_manifest ✓ Izbrisano skladišče wz414-labs/platform_manifest

Vidite, da je takoj izbrisal repo brez zahteve za potrditev, ker sem tam posredoval parameter »–confirm«. Če ga ne bi opravili, bi dobili tole:

$ gh repo izbrisati windowz414/systemd? Vnesite windowz414/systemd za potrditev brisanja:

In morali bi vnesti celotno ime repoja. Izguba časa…

Povzetek

Preprosto povedano, `gh` je precej poenostavljen ovoj Git CLI/Curl, ki pod isto streho združuje preproste operacije Git in GitHub API. Kako ga uporabljate? Se vam zdi obetavno tako kot meni? Veselimo se vašega odgovora!

Povezani članki