La facile uzebla komandlinia ilo de GitHub: "gh"!

Se vi uzis GitHub kaj preferis la komandlinion kiel mi por fari ĉion sen komplikaĵoj en GUI, vi eble rimarkis kiel GitHub komencis uzi sian ne tiom novan ilon nomatan "gh". Mi decidis provi ĝin, ĉar ĝi aspektis promesplena finfine. Kaj mi persone ŝatis ĝin multe - Tiel multe ke mi volis fari artikolon pri ĝi!

Antaŭ ol komenci, mi devas klarigi plurajn terminojn, kiujn mi uzos en ĉi tiu artikolo.

"GH" signifas "GitHub”. Ĉi tie ankaŭ devenas la nomo de la ilo, do ĝi ne povas esti konfuzita kun Git mem. Por klarigi kion ĝi faras ĝenerale, vi povas krei, forkigi, forigi, foliumi repostojn; krei tirpetojn; kaj multe pli. Se vi ne povas trovi funkcion sed ankaŭ ne volas forlasi terminalon, ĝi ankaŭ provizas tekst-bazitan retumilon por ke vi trarigardu paĝojn en GitHub.

"CLI" signifas "Cordono Lne Ininterfaco”. Tiu Terminalo (aŭ en Vindozo, Command Prompt) estas unu el ili. Se estas "CLI" aldonita apud nomo de aplikaĵo ("Git CLI" por ĉi tiu artikolo), tio signifas, ke la aplikaĵo funkcias nur per terminalo. Kaj "Git CLI" en ĉi tiu kunteksto estas, nu, la Git, kiun ni konas. Kiel la komando, per kiu ni faras kommitaĵojn aŭ rebazojn.

GUI signifas "Grafika User Ininterfaco” kaj ĝi estas la interfaco per kiu ni “navigas”. Pli bone dirite, labortabla medio ĝenerale estas GUI.

"API-ŝlosilo" estas ia sekreta ŝnuro/dosiero, kiun vi uzas por aŭtentikigi al servoj. Atentu, ke ĝi preterpasas 2-faktoran aŭtentikigon kaj tiel plu kiam vi aŭtentikigas ĝin. Do zorgu konservi ilin sekuraj kaj ie, kiu estas ekstere de atingo per aliaj rimedoj.

Antaŭ ĉio, kio estas ĉi tiu ilo? Kiel ĝi pritraktas operaciojn, kiujn ni farus per Git CLI?

"gh" povas esti konsiderata kiel malferma fonto (Fontkodo) envolvaĵo utiliganta Git CLI mem kaj GitHub-APIojn por fari aferojn. Fakte, vi eĉ povas transdoni parametrojn al la Git-komandoj, kiujn ĝi uzas! Mi eniros tiujn poste.

Instalado kaj agordo

Memoru, ke mi trapasos la instaladon uzante termux. Sed la proceduro devus esti preskaŭ sama kiel vi povus havi sur Debian-bazita distribuo - Ubuntu havas ĝin en siaj oficialaj repostoj ekzemple. Por Vindozo, nu, vi bezonas aŭ CygWin aŭ WSL mi supozas. ¯\_(ツ)_/¯

# Ni unue instalu la ilon. Ankaŭ instalante Git ĉar ĝi estas la backend # por gh. $ pkg install git gh -y # Tiam antaŭ ĉio, ni devas aŭtentikigi. Ĉi tio konservos # novan API-ŝlosilon en la datumbazo de la ilo por ke vi ne bezonos aŭtentigi # denove. Se vi jam agordis GITHUB_TOKEN, ĉi tio ne funkcios, do malŝalti # ĝin unue. :) $ gh aŭth ensaluto

Nun, antaŭ ol ni daŭrigu ĉi tie, mi devas atentigi plurajn aferojn.

  • unue, ne elektu "GitHub Enterprise Server" se vi ne havas ian mem-gastigitan GitHub.
  • Due, uzu SSH anstataŭ HTTPS se vi havas vian publikan ŝlosilon aldonita al via GitHub-konto. Se vi perdos la API-ŝlosilon, vi almenaŭ ne perdos vian SSH-ŝlosilon, do ĝi ankaŭ povas esti bona rezerva metodo.
  • Trie, elektu ensaluti per retumilo nur se vi ne havas API-ŝlosilon ĉemane! Vere, ne havus sencon havi alian ŝlosilon dum vi jam havas tian.

Post kiam vi finis agordi aferojn, ni diru pri ĝi al Git CLI.

$ gh aŭth setup-git

Ĉi tio faros la necesajn Git CLI-agordojn por se viaj refleksoj enirus kaj igos vin uzi Git anstataŭ GH.

Kelkaj bazaj komandoj

Nun kiam vi instalis GH, lasu min instrui al vi plurajn bazajn komandojn en rakontobazo.

Antaŭ ĉio, ni diru, ke vi volas krei tiran peton al mia loka deponejo de manifestoj. Vi volas unue forki ĝin.

$ gh repo forko windowz414/platform_manifest ! windowz414/platform_manifest jam ekzistas ? Ĉu vi ŝatus kloni la forkon? Jes Klonado en 'platform_manifest'... fora: Nombrado de objektoj: 136, farita. fora: Kalkulado de objektoj: 100% (136/136), farita. fora: Kunpremado de objektoj: 100% (81/81), farita. fora: Entute 136 (delta 46), reuzita 89 (delta 12), pak-reuzita 0 Ricevanta objektoj: 100% (136/136), 30.70 KiB | 166.00 KiB/s, farita. Solvado de deltoj: 100% (46/46), farita. Ĝisdatigante kontraŭflue El github.com:windowz414/platform_manifest * [nova branĉo] amyrom/rosie -> kontraŭflue/amyrom/rosie * [nova branĉo] aosp-eleven -> kontraŭflue/aosp-eleven * [nova branĉo] aosp-ten -> kontraŭflue/aosp-ten * [nova branĉo] sago-11.0 -> kontraŭflue/sago-11.0 * [nova branĉo] cm-14.1 -> kontraŭflue/cm-14.1 * [nova branĉo] dot11 -> kontraŭflue/punkto11 * [nova branĉo ] e/os/v1-nugat -> upstream/e/os/v1-nugat * [nova branĉo] fluid-11 -> upstream/fluid-11 * [nova branĉo] fox_7.1 -> upstream/fox_7.1 * [nova branĉo] hentai-rika -> upstream/hentai-rika * [nova branĉo] ion-pie -> upstream/ion-pie * [nova branĉo] lineage-15.1 -> upstream/lineage-15.1 * [nova branĉo] genlinio -17.1 -> upstream/lineage-17.1 * [nova branĉo] lineage-18.1 -> upstream/lineage-18.1 * [nova branĉo] lineage-18.1_teos -> upstream/lineage-18.1_teos * [nova branĉo] lineage-19.0 - > upstream/lineage-19.0 * [nova branĉo] ĉefa -> upstream/ĉefa * [nova branĉo] mkn-mr1 -> upstream/mkn-mr1 * [nova branĉo] revengeos-r11.0 -> upstream/revengeos-r11.0. 1 * [nova branĉo] stelar-S1 -> kontraŭflue/stela-S11 * [nova branĉo] teos-n -> kontraŭflue/teos-n * [nova branĉo] weebprojekt-11 -> kontraŭflue/weebprojekt-XNUMX ✓ Klonita forko

Tiam ni diru, ke vi havas apartan organizon por viaj eksperimentoj nomatan "wz414-labs", kiun vi ankoraŭ ne eniris vian personan profilon kaj volas kloni tie kaj poste malfermi tiri peton tra tie anstataŭe. Vi ankaŭ volas kloni la branĉon "cm-14.1" por ke vi ne bezonos fari git-checkout al ĝi denove.

$ gh repo forko windowz414/platform_manifest --org="wz414-labs" -- --branch="cm-14.1" ✓ Kreita forko wz414-labs/platform_manifest ? Ĉu vi ŝatus kloni la forkon? Jes Klonado en 'platform_manifest'... fora: Nombrado de objektoj: 136, farita. fora: Kalkulado de objektoj: 100% (136/136), farita. fora: Kunpremado de objektoj: 100% (81/81), farita. fora: Entute 136 (delta 46), reuzita 89 (delta 12), pak-reuzita 0 Ricevanta objektoj: 100% (136/136), 30.70 KiB | 120.00 KiB/s, farita. Solvado de deltoj: 100% (46/46), farita. Ĝisdatigante kontraŭflue El github.com:windowz414/platform_manifest * [nova branĉo] amyrom/rosie -> kontraŭflue/amyrom/rosie * [nova branĉo] aosp-eleven -> kontraŭflue/aosp-eleven * [nova branĉo] aosp-ten -> kontraŭflue/aosp-ten * [nova branĉo] sago-11.0 -> kontraŭflue/sago-11.0 * [nova branĉo] cm-14.1 -> kontraŭflue/cm-14.1 * [nova branĉo] dot11 -> kontraŭflue/punkto11 * [nova branĉo ] e/os/v1-nugat -> upstream/e/os/v1-nugat * [nova branĉo] fluid-11 -> upstream/fluid-11 * [nova branĉo] fox_7.1 -> upstream/fox_7.1 * [nova branĉo] hentai-rika -> upstream/hentai-rika * [nova branĉo] ion-pie -> upstream/ion-pie * [nova branĉo] lineage-15.1 -> upstream/lineage-15.1 * [nova branĉo] genlinio -17.1 -> upstream/lineage-17.1 * [nova branĉo] lineage-18.1 -> upstream/lineage-18.1 * [nova branĉo] lineage-18.1_teos -> upstream/lineage-18.1_teos * [nova branĉo] lineage-19.0 - > upstream/lineage-19.0 * [nova branĉo] ĉefa -> upstream/ĉefa * [nova branĉo] mkn-mr1 -> upstream/mkn-mr1 * [nova branĉo] revengeos-r11.0 -> upstream/revengeos-r11.0. 1 * [nova branĉo] stelar-S1 -> kontraŭflue/stela-S11 * [nova branĉo] teos-n -> kontraŭflue/teos-n * [nova branĉo] weebprojekt-11 -> kontraŭflue/weebprojekt-XNUMX ✓ Klonita forko

Vi vidas, ke mi ne uzis “-b cm-14.1” kaj faris la longan argumenton anstataŭe. En la dato de ĉi tiu artikolo, la 16-an de februaro 2022, GH havas cimon, ke ĝi ne transdonas mallongajn argumentojn al Git CLI ĝuste kaj do ĝi devas esti farita kiel longaj argumentoj anstataŭe.

Post kiam tio estas farita, vi regule eniris la dosierujon, faris viajn ŝanĝojn, faris tiam puŝis ĝin, kaj pretas fari tiri peton. Por ĉi tio, ĉio, kion vi bezonas, estas simpla

$ gh pr create --branch="cm-14.1" Kreante tirpeton por wz414-labs:cm-14.1 en cm-14.1 en windowz414/platform_manifest ? Titolo teos: Ŝanĝi al Git-Polycule ? Korpo ? Kio sekvas? Sendu https://github.com/windowz414/platform_manifest/pull/1

Se vi ne aldonas “–branch=cm-14.1”, vi kreus PR al “ĉefa” branĉo, kiu kompreneble kaŭzos problemojn kiam ĝi ne estas ĝuste traktata.

Kaj nun, mi devas kunfandi ĉi tiun PR, ĉu ne? Do mi unue klonas la repo, checkout al la branĉo asignita, kaj listigas PR-oj unue.

# Klonado unue. $ git clone https://github.com/windowz414/platform_manifest Klonado en 'platform_manifest'... fora: Nombrado de objektoj: 136, farita. fora: Kalkulado de objektoj: 100% (136/136), farita. fora: Kunpremado de objektoj: 100% (81/81), farita. fora: Entute 136 (delta 46), reuzita 89 (delta 12), pak-reuzita 0 Ricevanta objektoj: 100% (136/136), 30.70 KiB | 137.00 KiB/s, farita. Solvado de deltoj: 100% (46/46), farita. # Poste kontrolu al la branĉo. $ git checkout cm-14.1 branĉo 'cm-14.1' agordita por spuri 'origin/cm-14.1'. Ŝanĝis al nova branĉo 'cm-14.1' # Kaj nun listigante PR-ojn. $ gh pr listo Montrante 1 el 1 malfermita tiri peto en windowz414/platform_manifest #1 teos: Ŝanĝi al Git-Polycule wz414-labs:cm-14.1

Nun kiam ni vidas, ke ekzistas PR por ŝanĝi fora al "Git-Polycule", ni vidu, kio ŝanĝiĝis kun ĝi.

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

Ŝajnas promesplena! Tempo kunfandi!

$ gh pr kunfandi 1 ? Kiun kunfandan metodon vi ŝatus uzi? Rebazi kaj kunfandi ? Kio sekvas? Sendu ✓ Rebazita kaj kunfandita tirpeto #1 (teos: Ŝanĝi al Git-Polycule)

Nun kiam mi kunfandis ĝin, vi povas forigi vian forkon.

$ gh repo delete --confirm wz414-labs/platform_manifest ✓ Forigita deponejo wz414-labs/platform_manifest

Vi vidas, ke rekte forigis la repo sen konfirma peto ĉar mi pasigis la parametron "–confirm" tie. Se vi ne pasus ĝin, vi ricevus ĉi tion:

$ gh repo forigi windowz414/systemd ? Tajpu windowz414/systemd por konfirmi forigon:

Kaj vi bezonus tajpi la tutan repo-nomon. Perdo de tempo…

resumo

Simple dirite, `gh' estas sufiĉe simpligita Git CLI/Curl-envolvilo unuiganta simplajn Git-operaciojn kaj GitHub API-aĵojn sub la sama tegmento. Kiel vi uzas ĝin? Ĉu ĝi aspektas promesplena al vi kiel al mi? Antaŭĝojas aŭdi de vi!

rilataj Artikoloj