L'eina de línia d'ordres fàcil d'utilitzar de GitHub: "gh"!

Si heu estat utilitzant GitHub i preferiu la línia d'ordres com jo per fer-ho tot sense cap complicació a la GUI, potser haureu notat com GitHub va començar a utilitzar la seva eina no tan nova anomenada "gh". Vaig decidir provar-ho, perquè semblava prometedor després de tot. I personalment m'ha agradat molt, tant que m'ha agradat fer un article al respecte!

Abans de començar, però, he d'explicar diversos termes que faré servir en aquest article.

"GH" significa "GitHub”. D'aquí també prové el nom de l'eina, de manera que no es pot confondre amb el mateix Git. Per explicar què fa en general, podeu crear, bifurcar, suprimir, navegar per repositoris; crear sol·licituds d'extracció; i molts més. En cas que no trobeu cap funció però tampoc voleu sortir del terminal, també us proporciona un navegador basat en text perquè navegueu per pàgines a GitHub.

"CLI" significa "Cordre Line Ininterfície”. Aquest terminal (o a Windows, símbol del sistema) és un d'ells. Si hi ha una "CLI" al costat del nom d'una aplicació ("Git CLI" per a aquest article), vol dir que l'aplicació només s'executa a través del terminal. I "Git CLI" en aquest context és, bé, el Git que coneixem. Igual que l'ordre amb què fem commits o rebases.

GUI significa "Gràfica User Ininterface” i és la interfície per la qual “naveguem”. Millor dit, un entorn d'escriptori en general és una GUI.

Una "clau API" és una mena de cadena/fitxer secret que utilitzeu per autenticar-vos als serveis. Tingueu en compte que passa per alt l'autenticació de 2 factors i així successivament quan us autentiqueu. Així que assegureu-vos de mantenir-los segurs i en un lloc fora de l'abast per altres mitjans.

En primer lloc, quina és aquesta eina? Com gestiona les operacions que faríem mitjançant Git CLI?

"gh" es pot considerar com un codi obert (Codi font) que utilitza la pròpia CLI de Git i les API de GitHub per fer les coses. De fet, fins i tot podeu passar paràmetres a les ordres de Git que utilitza! M'hi posaré més endavant.

Instal·lació i configuració

Tingueu en compte que passaré per la instal·lació utilitzant Termux. Però el procediment hauria de ser pràcticament el mateix que podríeu tenir en una distribució basada en Debian: Ubuntu el té als seus repositoris oficials, per exemple. Per a Windows, bé, suposo que necessiteu CygWin o WSL. ¯\_(ツ)_/¯

# Instal·lem l'eina primer. També instal·leu Git, ja que és el backend # per a gh. $ pkg install git gh -y # Aleshores, abans de tot, ens hem d'autenticar. Això desarà una # clau API nova a la base de dades de l'eina, de manera que no caldrà que torneu a autenticar #. Si ja heu configurat GITHUB_TOKEN, això no funcionarà, així que primer desactiveu-lo. :) $ gh autenticació d'inici de sessió

Ara, abans de continuar aquí, he de destacar diverses coses.

  • En primer lloc, no trieu "GitHub Enterprise Server" si no teniu cap tipus de GitHub autoallotjat.
  • En segon lloc, utilitzeu SSH en comptes d'HTTPS si teniu la clau pública afegida al vostre compte de GitHub. En cas que perdeu la clau de l'API, almenys no perdreu la vostra clau SSH, de manera que també pot ser un bon mètode alternatiu.
  • En tercer lloc, trieu iniciar sessió amb el navegador només si no teniu una clau API a mà! Realment, no tindria sentit tenir una altra clau mentre ja en tens una.

Un cop hàgiu acabat de configurar les coses, expliquem-ho a Git CLI.

$ gh auth setup-git

Això farà que les configuracions necessàries de la CLI de Git per si els vostres reflexos s'endinsen i us faran utilitzar Git en comptes de GH.

Algunes ordres bàsiques

Ara que heu configurat GH, deixeu-me ensenyar-vos diverses ordres bàsiques en una història.

Primer de tot, suposem que voleu crear una sol·licitud d'extracció al meu repositori de manifests local. Primer vols bifurcar-ho.

$ gh repo fork windowz414/platform_manifest ! windowz414/platform_manifest ja existeix? T'agradaria clonar la forquilla? Sí Clonació a 'platform_manifest'... remote: Enumeració d'objectes: 136, fet. remot: Comptar objectes: 100% (136/136), fet. remot: Compressió d'objectes: 100% (81/81), fet. remot: Total 136 (delta 46), reutilitzat 89 (delta 12), pack-reused 0 Objectes de recepció: 100% (136/136), 30.70 KiB | 166.00 KiB/s, fet. Resolució de deltes: 100% (46/46), fet. Actualització aigües amunt Des de github.com:windowz414/platform_manifest * [branca nova] amyrom/rosie -> aigües amunt/amyrom/rosie * [branca nova] aosp-eleven -> aigües amunt/aosp-eleven * [branca nova] aosp-ten -> upstream/aosp-ten * [nova branca] arrow-11.0 -> upstream/arrow-11.0 * [nova branca] cm-14.1 -> upstream/cm-14.1 * [nova branca] dot11 -> upstream/dot11 * [nova branca] ] e/os/v1-nougat -> upstream/e/os/v1-nougat * [nova branca] fluid-11 -> upstream/fluid-11 * [nova branca] fox_7.1 -> upstream/fox_7.1 * [nova branca] hentai-rika -> aigües amunt/hentai-rika * [nova branca] ion-pie -> aigües amunt/ion-pie * [nova branca] llinatge-15.1 -> aigües amunt/linatge-15.1 * [nova branca] llinatge -17.1 -> upstream/lineage-17.1 * [nova branca] linatge-18.1 -> upstream/lineage-18.1 * [nova branca] lineage-18.1_teos -> upstream/lineage-18.1_teos * [nova branca] linatge-19.0 - > upstream/lineage-19.0 * [nova branca] principal -> upstream/principal * [nova branca] mkn-mr1 -> upstream/mkn-mr1 * [nova branca] revengeos-r11.0 -> upstream/revengeos-r11.0. 1 * [nova branca] stellar-S1 -> aigües amunt/estelar-S11 * [nova branca] teos-n -> aigües amunt/teos-n * [nova branca] weebprojekt-11 -> aigües amunt/weebprojekt-XNUMX ✓ Bifurcació clonada

Aleshores, suposem que teniu una organització separada per als vostres experiments anomenada "wz414-labs", que encara no heu introduït el vostre perfil personal i voleu clonar-hi i, en canvi, obriu la sol·licitud d'extracció. També voleu clonar la branca "cm-14.1" de manera que no haureu de tornar-hi a fer git-checkout.

$ gh repo fork windowz414/platform_manifest --org="wz414-labs" -- --branch="cm-14.1" ✓ S'ha creat la forquilla wz414-labs/platform_manifest ? T'agradaria clonar la forquilla? Sí Clonació a 'platform_manifest'... remote: Enumeració d'objectes: 136, fet. remot: Comptar objectes: 100% (136/136), fet. remot: Compressió d'objectes: 100% (81/81), fet. remot: Total 136 (delta 46), reutilitzat 89 (delta 12), pack-reused 0 Objectes de recepció: 100% (136/136), 30.70 KiB | 120.00 KiB/s, fet. Resolució de deltes: 100% (46/46), fet. Actualització aigües amunt Des de github.com:windowz414/platform_manifest * [branca nova] amyrom/rosie -> aigües amunt/amyrom/rosie * [branca nova] aosp-eleven -> aigües amunt/aosp-eleven * [branca nova] aosp-ten -> upstream/aosp-ten * [nova branca] arrow-11.0 -> upstream/arrow-11.0 * [nova branca] cm-14.1 -> upstream/cm-14.1 * [nova branca] dot11 -> upstream/dot11 * [nova branca] ] e/os/v1-nougat -> upstream/e/os/v1-nougat * [nova branca] fluid-11 -> upstream/fluid-11 * [nova branca] fox_7.1 -> upstream/fox_7.1 * [nova branca] hentai-rika -> aigües amunt/hentai-rika * [nova branca] ion-pie -> aigües amunt/ion-pie * [nova branca] llinatge-15.1 -> aigües amunt/linatge-15.1 * [nova branca] llinatge -17.1 -> upstream/lineage-17.1 * [nova branca] linatge-18.1 -> upstream/lineage-18.1 * [nova branca] lineage-18.1_teos -> upstream/lineage-18.1_teos * [nova branca] linatge-19.0 - > upstream/lineage-19.0 * [nova branca] principal -> upstream/principal * [nova branca] mkn-mr1 -> upstream/mkn-mr1 * [nova branca] revengeos-r11.0 -> upstream/revengeos-r11.0. 1 * [nova branca] stellar-S1 -> aigües amunt/estelar-S11 * [nova branca] teos-n -> aigües amunt/teos-n * [nova branca] weebprojekt-11 -> aigües amunt/weebprojekt-XNUMX ✓ Bifurcació clonada

Ja veieu que no vaig utilitzar "-b cm-14.1" i vaig fer l'argument llarg. A la data d'aquest article, el 16 de febrer de 2022, GH té un error que no passa correctament arguments curts a la CLI de Git i, per tant, s'ha de fer amb arguments llargs.

Un cop fet això, heu introduït regularment la carpeta, heu fet els vostres canvis, l'heu compromès i després l'heu empès i esteu preparats per fer la sol·licitud d'extracció. Per a això, tot el que necessiteu és un senzill

$ gh pr create --branch="cm-14.1" S'està creant una sol·licitud d'extracció per a wz414-labs:cm-14.1 a cm-14.1 a windowz414/platform_manifest ? Títol teos: Canvi a Git-Polycule ? Cos ? Que segueix? Envia https://github.com/windowz414/platform_manifest/pull/1

Si no afegiu “–branch=cm-14.1”, estareu creant PR cap a la branca “principal”, cosa que, per descomptat, causarà problemes quan no es gestiona correctament.

I ara, he de fusionar aquest PR, oi? Per tant, primer clono el repo, faig la compra a la sucursal assignada i enumero primer els PR.

# Clonar primer. $ git clone https://github.com/windowz414/platform_manifest Clonació a 'platform_manifest'... remote: Enumeració d'objectes: 136, fet. remot: Comptar objectes: 100% (136/136), fet. remot: Compressió d'objectes: 100% (81/81), fet. remot: Total 136 (delta 46), reutilitzat 89 (delta 12), pack-reused 0 Objectes de recepció: 100% (136/136), 30.70 KiB | 137.00 KiB/s, fet. Resolució de deltes: 100% (46/46), fet. # A continuació, sortiu a la sucursal. $ git checkout cm-14.1 branca 'cm-14.1' configurada per fer el seguiment d''origen/cm-14.1'. S'ha canviat a una nova branca 'cm-14.1' # I ara llista de PR. $ gh pr list Mostrant 1 de 1 sol·licitud d'extracció oberta a windowz414/platform_manifest #1 teos: Canvia a Git-Polycule wz414-labs:cm-14.1

Ara que veiem que hi ha un PR per canviar el comandament a "Git-Polycule", anem a veure què ha canviat amb ell.

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

Sembla prometedor! És hora de fusionar-se!

$ gh pr fusionar 1 ? Quin mètode de combinació t'agradaria utilitzar? Rebase i fusiona? Que segueix? Envia ✓ Sol·licitud d'extracció de base i combinada núm. 1 (teos: Canvia a Git-Polycule)

Ara que l'he combinat, podeu suprimir la vostra forquilla.

$ gh repo delete --confirm wz414-labs/platform_manifest ✓ Repositori eliminat wz414-labs/platform_manifest

Veu que s'ha eliminat directament el repo sense sol·licitud de confirmació perquè hi he passat el paràmetre "-confirm". Si no l'aprovaries, obtindràs això:

$ gh repo esborra windowz414/systemd? Escriviu windowz414/systemd per confirmar la supressió:

I hauríeu d'escriure tot el nom del repo. Pèrdua de temps…

resum

En poques paraules, `gh` és un embolcall de Git CLI/Curl força simplificat que unifica operacions senzilles de Git i coses de l'API de GitHub sota el mateix sostre. Com ho fas servir? Et sembla prometedor com a mi? Espero saber de vostè!

Articles Relacionats