GitHubov alat za naredbeni redak jednostavan za korištenje: “gh”!

Ako koristite GitHub i preferirate naredbeni redak kao ja da sve obavite bez ikakvih komplikacija na GUI-ju, možda ste primijetili kako je GitHub počeo koristiti njihov ne tako novi alat pod nazivom "gh". Odlučio sam pokušati, jer je ipak izgledalo obećavajuće. I meni se osobno jako svidio – Toliko da sam htio napisati članak o tome!

No, prije nego što počnemo, moram objasniti nekoliko izraza koje ću koristiti u ovom članku.

"GH" je kratica za "GitHub”. Odatle potječe i naziv alata, tako da se ne može zamijeniti sa samim Gitom. Da biste objasnili što radi općenito, možete kreirati, račvati, brisati, pregledavati repozitorije; kreirati zahtjeve za povlačenjem; i još mnogo toga. U slučaju da ne možete pronaći značajku, ali također ne želite napustiti terminal, također nudi tekstualni preglednik za pregledavanje stranica na GitHubu.

"CLI" je kratica za "Cnaredba Line Isučelje”. Taj je terminal (ili u sustavu Windows naredbeni redak) jedan od njih. Ako je uz naziv aplikacije dodan "CLI" ("Git CLI" za ovaj članak), to znači da aplikacija radi samo preko terminala. A "Git CLI" u ovom kontekstu je, pa, Git kojeg poznajemo. Kao naredba s kojom vršimo predaje ili rebaze.

GUI je kratica za "Grafičan Uvidjeti Interface” i to je sučelje kojim se “navigiramo”. Bolje rečeno, desktop okruženje općenito je GUI.

"API ključ" je neka vrsta tajnog niza/datoteke koju koristite za autentifikaciju usluga. Pazite da zaobilazi dvofaktornu provjeru autentičnosti i tako dalje kada se autentifikujete s njim. Stoga se pobrinite da ih držite na sigurnom i negdje izvan dohvata drugih sredstava.

Prije svega, što je ovaj alat? Kako upravlja operacijama koje bismo radili preko Git CLI-ja?

“gh” se može smatrati otvorenim kodom (Izvorni kod) omot koji koristi sam Git CLI i GitHub API-je za izvršavanje stvari. Zapravo, možete čak proslijediti parametre Git naredbama koje koristi! Ući ću u to kasnije.

Instalacija i postavljanje

Imajte na umu da ću proći kroz instalaciju pomoću Termux. Ali postupak bi trebao biti gotovo isti kao što biste mogli imati na distribuciji temeljenoj na Debianu - Ubuntu to ima na svojim službenim repozicijama, na primjer. Pa, za Windows vam je potreban CygWin ili WSL, pretpostavljam. ¯\_(ツ)_/¯

# Najprije instalirajmo alat. Također instaliram Git jer je to pozadina # za gh. $ pkg install git gh -y # Prije svega, moramo se autentificirati. Ovo će spremiti # novi API ključ u bazu podataka alata tako da nećete morati ponovno # provjeravati autentičnost. Ako ste već postavili GITHUB_TOKEN, ovo neće raditi pa ga prvo # poništite. :) $ gh auth prijava

Sada, prije nego nastavimo ovdje, moram istaknuti nekoliko stvari.

  • Prvo, nemojte odabrati “GitHub Enterprise Server” ako nemate neku vrstu GitHuba s vlastitim hostom.
  • Drugo, koristite SSH umjesto HTTPS-a ako ste svoj javni ključ dodali na svoj GitHub račun. U slučaju da izgubite API ključ, barem nećete izgubiti svoj SSH ključ tako da to također može biti dobra rezervna metoda.
  • Treće, odaberite prijavu putem preglednika samo ako nemate API ključ pri ruci! Stvarno, ne bi imalo smisla imati još jedan ključ dok ga već imate.

Kad završite s postavljanjem stvari, recite Git CLI o tome.

$ gh auth setup-git

Ovo će napraviti potrebne Git CLI konfiguracije za slučaj da vaši refleksi upadnu i natjeraju vas da koristite Git umjesto GH.

Neke osnovne naredbe

Sad kad ste postavili GH, dopustite mi da vas naučim nekoliko osnovnih naredbi u osnovi priče.

Prije svega, recimo da želite stvoriti zahtjev za povlačenjem za moj lokalni manifest repo. Prvo ga želiš račvati.

$ gh repo fork windowz414/platform_manifest ! windowz414/platform_manifest već postoji? Želite li klonirati vilicu? Da Kloniranje u 'platform_manifest'... udaljeno: Nabrajanje objekata: 136, gotovo. daljinski: Brojanje predmeta: 100% (136/136), gotovo. daljinski: Sažimanje objekata: 100% (81/81), gotovo. daljinski: Ukupno 136 (delta 46), ponovno korišteno 89 (delta 12), paket-ponovno korišteno 0 Prijemni objekti: 100% (136/136), 30.70 KiB | 166.00 KiB/s, gotovo. Rješavanje delta: 100% (46/46), gotovo. Ažuriranje uzvodno s github.com:windowz414/platform_manifest * [nova grana] amyrom/rosie -> uzvodno/amyrom/rosie * [nova grana] aosp-eleven -> uzvodno/aosp-eleven * [nova grana] aosp-ten -> uzvodno/aosp-ten * [nova grana] arrow-11.0 -> uzvodno/arrow-11.0 * [nova grana] cm-14.1 -> uzvodno/cm-14.1 * [nova grana] dot11 -> uzvodno/dot11 * [nova grana ] e/os/v1-nougat -> uzvodno/e/os/v1-nougat * [nova grana] fluid-11 -> uzvodno/fluid-11 * [nova grana] fox_7.1 -> uzvodno/fox_7.1 * [nova grana] hentai-rika -> uzvodno/hentai-rika * [nova grana] ion-pie -> uzvodno/ion-pie * [nova grana] lineage-15.1 -> uzvodno/lineage-15.1 * [nova grana] linija -17.1 -> uzvodno/lineage-17.1 * [nova grana] lineage-18.1 -> uzvodno/lineage-18.1 * [nova grana] lineage-18.1_teos -> uzvodno/lineage-18.1_teos * [nova grana] lineage-19.0 - > uzvodno/lineage-19.0 * [nova grana] glavna -> uzvodno/glavna * [nova grana] mkn-mr1 -> uzvodno/mkn-mr1 * [nova grana] revengeos-r11.0 -> uzvodno/revengeos-r11.0. 1 * [nova grana] stellar-S1 -> uzvodno/stellar-S11 * [nova grana] teos-n -> uzvodno/teos-n * [nova grana] weebprojekt-11 -> uzvodno/weebprojekt-XNUMX ✓ Klonirana vilica

Onda recimo da imate zasebnu organizaciju za svoje eksperimente pod nazivom “wz414-labs”, koju još niste račvali na svom osobnom profilu i želite ga klonirati, a zatim tamo otvoriti zahtjev za povlačenjem. Također želite klonirati granu “cm-14.1” tako da više nećete morati raditi git-checkout za nju.

$ gh repo fork windowz414/platform_manifest --org="wz414-labs" -- --branch="cm-14.1" ✓ Stvoren fork wz414-labs/platform_manifest? Želite li klonirati vilicu? Da Kloniranje u 'platform_manifest'... udaljeno: Nabrajanje objekata: 136, gotovo. daljinski: Brojanje predmeta: 100% (136/136), gotovo. daljinski: Sažimanje objekata: 100% (81/81), gotovo. daljinski: Ukupno 136 (delta 46), ponovno korišteno 89 (delta 12), paket-ponovno korišteno 0 Prijemni objekti: 100% (136/136), 30.70 KiB | 120.00 KiB/s, gotovo. Rješavanje delta: 100% (46/46), gotovo. Ažuriranje uzvodno s github.com:windowz414/platform_manifest * [nova grana] amyrom/rosie -> uzvodno/amyrom/rosie * [nova grana] aosp-eleven -> uzvodno/aosp-eleven * [nova grana] aosp-ten -> uzvodno/aosp-ten * [nova grana] arrow-11.0 -> uzvodno/arrow-11.0 * [nova grana] cm-14.1 -> uzvodno/cm-14.1 * [nova grana] dot11 -> uzvodno/dot11 * [nova grana ] e/os/v1-nougat -> uzvodno/e/os/v1-nougat * [nova grana] fluid-11 -> uzvodno/fluid-11 * [nova grana] fox_7.1 -> uzvodno/fox_7.1 * [nova grana] hentai-rika -> uzvodno/hentai-rika * [nova grana] ion-pie -> uzvodno/ion-pie * [nova grana] lineage-15.1 -> uzvodno/lineage-15.1 * [nova grana] linija -17.1 -> uzvodno/lineage-17.1 * [nova grana] lineage-18.1 -> uzvodno/lineage-18.1 * [nova grana] lineage-18.1_teos -> uzvodno/lineage-18.1_teos * [nova grana] lineage-19.0 - > uzvodno/lineage-19.0 * [nova grana] glavna -> uzvodno/glavna * [nova grana] mkn-mr1 -> uzvodno/mkn-mr1 * [nova grana] revengeos-r11.0 -> uzvodno/revengeos-r11.0. 1 * [nova grana] stellar-S1 -> uzvodno/stellar-S11 * [nova grana] teos-n -> uzvodno/teos-n * [nova grana] weebprojekt-11 -> uzvodno/weebprojekt-XNUMX ✓ Klonirana vilica

Vidite da nisam upotrijebio “-b cm-14.1” i umjesto toga napravio dugi argument. Od datuma ovog članka, 16. veljače 2022., GH ima pogrešku da ne prosljeđuje kratke argumente u Git CLI ispravno pa to treba učiniti kao duge argumente umjesto toga.

Nakon što je to učinjeno, redovito ste ulazili u mapu, unosili promjene, počinili, a zatim gurnuli i spremni ste izvršiti zahtjev za povlačenjem. Za ovo vam treba samo jednostavan

$ gh pr create --branch="cm-14.1" Stvaranje zahtjeva za povlačenjem za wz414-labs:cm-14.1 u cm-14.1 u windowz414/platform_manifest? Naslov teos: Promjena u Git-Polycule? Tijelo ? Što je sljedeće? Pošalji https://github.com/windowz414/platform_manifest/pull/1

Ako ne dodate “–branch=cm-14.1”, stvorili biste PR prema “glavnoj” grani, što će naravno uzrokovati probleme ako se s njom ne postupa ispravno.

A sada, moram spojiti ovaj PR, zar ne? Stoga prvo kloniram repo, odjavim se u dodijeljenu podružnicu i prvo navedem PR-ove.

# Prvo kloniranje. $ git clone https://github.com/windowz414/platform_manifest Kloniranje u 'platform_manifest'... udaljeno: Nabrajanje objekata: 136, gotovo. daljinski: Brojanje predmeta: 100% (136/136), gotovo. daljinski: Sažimanje objekata: 100% (81/81), gotovo. daljinski: Ukupno 136 (delta 46), ponovno korišteno 89 (delta 12), paket-ponovno korišteno 0 Prijemni objekti: 100% (136/136), 30.70 KiB | 137.00 KiB/s, gotovo. Rješavanje delta: 100% (46/46), gotovo. # Zatim se odjavljujem u poslovnicu. $ git checkout cm-14.1 grana 'cm-14.1' postavljena za praćenje 'origin/cm-14.1'. Prebačen na novu granu 'cm-14.1' # A sada popis PR-ova. $ gh pr popis Prikazuje 1 od 1 zahtjeva za otvorenim povlačenjem u windowz414/platform_manifest #1 teos: Promjena u Git-Polycule wz414-labs:cm-14.1

Sad kad vidimo da postoji PR za promjenu daljinskog upravljača u “Git-Polycule”, da vidimo što se promijenilo s njim.

$ 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 @@ 

Čini se obećavajućim! Vrijeme je za spajanje!

$ gh pr spajanje 1 ? Koju metodu spajanja želite koristiti? Ponovno baziranje i spajanje? Što je sljedeće? Pošaljite ✓ Rebased i spojeni zahtjev za povlačenje #1 (teos: Promjena u Git-Polycule)

Sada kada sam to spojio, možete izbrisati svoju vilicu.

$ gh repo delete --confirm wz414-labs/platform_manifest ✓ Izbrisano spremište wz414-labs/platform_manifest

Vidite da je odmah izbrisao repo bez zahtjeva za potvrdu jer sam tamo proslijedio parametar "–confirm". Ako ga ne biste položili, dobili biste ovo:

$ gh repo izbrisati windowz414/systemd ? Upišite windowz414/systemd za potvrdu brisanja:

I trebali biste upisati cijeli naziv repoa. Gubitak vremena…

rezime

Jednostavno rečeno, `gh` je prilično pojednostavljeni Git CLI/Curl omotač koji ujedinjuje jednostavne Git operacije i GitHub API stvari pod istim krovom. Kako ga koristite? Izgleda li vam obećavajuće kao meni? Radujemo se vašem odgovoru!

Vezani članci