Hvis du har brukt GitHub og foretrekker kommandolinjen som meg for å få alt gjort uten noen komplikasjoner på GUI, har du kanskje lagt merke til hvordan GitHub begynte å bruke deres ikke-så-nye verktøy kalt "gh". Jeg bestemte meg for å prøve det, for det så tross alt lovende ut. Og jeg personlig likte det veldig godt – så mye at jeg ønsket å lage en artikkel om det!
Før vi begynner, må jeg imidlertid forklare flere begreper jeg skal bruke i denne artikkelen.
"GH" står for "GitHub". Det er også her verktøyets navn stammer fra, så det kan ikke forveksles med Git selv. For å forklare hva den gjør generelt, kan du opprette, dele, slette, bla gjennom repos; opprette pull-forespørsler; og mange flere. I tilfelle du ikke finner en funksjon, men heller ikke ønsker å forlate terminalen, gir den også en tekstbasert nettleser for deg å bla gjennom sider i GitHub.
"CLI" står for "Cbefaling Line Igrensesnitt". Den terminalen (eller i Windows, ledetekst) er en av dem. Hvis det er en "CLI" ved siden av et appnavn ("Git CLI" for denne artikkelen), betyr det at appen bare kjører gjennom terminalen. Og "Git CLI" i denne sammenhengen er, vel, den Git vi kjenner. Som kommandoen vi gjør commits eller rebaser med.
GUI står for "Graffisk User Interface" og det er grensesnittet vi "navigerer" på. Bedre sagt, et skrivebordsmiljø er generelt en GUI.
En "API-nøkkel" er en slags hemmelig streng/fil du bruker for å autentisere til tjenester. Vær oppmerksom på at den omgår 2-faktor autentisering og så videre når du autentiserer med den. Så sørg for å holde dem trygge og et sted som er utenfor rekkevidde på andre måter.
Først av alt, hva er dette verktøyet? Hvordan håndterer den operasjoner vi ville gjort gjennom Git CLI?
"gh" kan betraktes som en åpen kildekode (Kildekode) wrapper som bruker selve Git CLI og GitHub API-er for å få ting gjort. Faktisk kan du til og med sende parametere til Git-kommandoene den bruker! Jeg kommer inn på dem senere.
Installere og sette opp
Husk at jeg skal gå gjennom installasjonen ved hjelp av Termux. Men prosedyren bør være omtrent den samme som du kunne ha på en Debian-basert distro - Ubuntu har det for eksempel på deres offisielle repos. For Windows, vel, du trenger enten CygWin eller WSL antar jeg. ¯\_(ツ)_/¯
# La oss installere verktøyet først. Installerer også Git siden det er backend # for gh. $ pkg install git gh -y # Så før alt, må vi autentisere. Dette vil lagre en # ny API-nøkkel i verktøyets database, slik at du ikke trenger å autentisere # igjen. Hvis du allerede har angitt GITHUB_TOKEN, vil dette ikke fungere, så deaktiver # det først. :) $ gh auth pålogging
Nå, før vi fortsetter her, må jeg påpeke flere ting.
- For det første, ikke velg "GitHub Enterprise Server" hvis du ikke har en slags selvhostet GitHub.
- Dernest, bruk SSH i stedet for HTTPS hvis du har lagt til den offentlige nøkkelen din på GitHub-kontoen din. I tilfelle du mister API-nøkkelen, vil du i det minste ikke miste SSH-nøkkelen din, så det kan også være en god reservemetode.
- For det tredje, velg å logge på med nettleseren bare hvis du ikke har en API-nøkkel for hånden! Virkelig, det ville ikke være fornuftig å ha en annen nøkkel mens du allerede har en.
Når du er ferdig med å sette opp ting, la oss fortelle Git CLI om det.
$ gh auth setup-git
Dette vil gjøre de nødvendige Git CLI-konfigurasjonene i tilfelle refleksene dine kommer inn og får deg til å bruke Git i stedet for GH.
Noen grunnleggende kommandoer
Nå som du har satt opp GH, la meg lære deg flere grunnleggende kommandoer på en historiebasis.
Først av alt, la oss si at du vil opprette en pull-forespørsel til min lokale manifest-repo. Du vil gaffel den først.
$ gh repo gaffel windowz414/platform_manifest! windowsz414/platform_manifest eksisterer allerede? Vil du klone gaffelen? Ja Kloning inn i 'platform_manifest'... fjernkontroll: Oppregning av objekter: 136, ferdig. fjernkontroll: Telle objekter: 100 % (136/136), ferdig. fjernkontroll: Komprimering av objekter: 100 % (81/81), ferdig. fjernkontroll: Totalt 136 (delta 46), gjenbrukt 89 (delta 12), pakke gjenbrukt 0 Mottakende objekter: 100 % (136/136), 30.70 KiB | 166.00 KiB/s, ferdig. Løse deltaer: 100 % (46/46), ferdig. Oppdatering oppstrøms Fra github.com:windowz414/platform_manifest * [ny gren] amyrom/rosie -> oppstrøms/amyrom/rosie * [ny gren] aosp-eleven -> oppstrøms/aosp-eleven * [ny gren] aosp-ten -> oppstrøms/aosp-ten * [ny gren] arrow-11.0 -> oppstrøms/pil-11.0 * [ny gren] cm-14.1 -> oppstrøms/cm-14.1 * [ny gren] dot11 -> oppstrøms/dot11 * [ny gren ] e/os/v1-nougat -> oppstrøms/e/os/v1-nougat * [ny gren] fluid-11 -> oppstrøms/fluid-11 * [ny gren] fox_7.1 -> oppstrøms/rev_7.1 * [ny gren] hentai-rika -> oppstrøms/hentai-rika * [ny gren] ion-pai -> oppstrøms/ion-pie * [ny gren] avstamning-15.1 -> oppstrøms/avstamning-15.1 * [ny gren] avstamning -17.1 -> oppstrøms/slekt-17.1 * [ny gren] avstamning-18.1 -> oppstrøms/avstamning-18.1 * [ny gren] avstamning-18.1_teos -> oppstrøms/avstamning-18.1_teos * [ny gren] avstamning-19.0 - > upstream/lineage-19.0 * [new branch] main -> upstream/main * [new branch] mkn-mr1 -> upstream/mkn-mr1 * [new branch] revengeos-r11.0 -> upstream/revengeos-r11.0. 1 * [ny gren] stellar-S1 -> oppstrøms/stellar-S11 * [ny gren] teos-n -> oppstrøms/teos-n * [ny gren] weebprosjekt-11 -> oppstrøms/weebprosjekt-XNUMX ✓ Klonet gaffel
La oss så si at du har en egen organisasjon for eksperimentene dine kalt "wz414-labs", at du ikke har forkastet din personlige profil ennå og ønsker å klone der og åpne pull-forespørselen der i stedet. Du vil også klone "cm-14.1"-grenen slik at du ikke trenger å gjøre git-checkout til den igjen.
$ gh repo gaffel windowz414/platform_manifest --org="wz414-labs" -- --branch="cm-14.1" ✓ Opprettet gaffel wz414-labs/platform_manifest ? Vil du klone gaffelen? Ja Kloning inn i 'platform_manifest'... fjernkontroll: Oppregning av objekter: 136, ferdig. fjernkontroll: Telle objekter: 100 % (136/136), ferdig. fjernkontroll: Komprimering av objekter: 100 % (81/81), ferdig. fjernkontroll: Totalt 136 (delta 46), gjenbrukt 89 (delta 12), pakke gjenbrukt 0 Mottakende objekter: 100 % (136/136), 30.70 KiB | 120.00 KiB/s, ferdig. Løse deltaer: 100 % (46/46), ferdig. Oppdatering oppstrøms Fra github.com:windowz414/platform_manifest * [ny gren] amyrom/rosie -> oppstrøms/amyrom/rosie * [ny gren] aosp-eleven -> oppstrøms/aosp-eleven * [ny gren] aosp-ten -> oppstrøms/aosp-ten * [ny gren] arrow-11.0 -> oppstrøms/pil-11.0 * [ny gren] cm-14.1 -> oppstrøms/cm-14.1 * [ny gren] dot11 -> oppstrøms/dot11 * [ny gren ] e/os/v1-nougat -> oppstrøms/e/os/v1-nougat * [ny gren] fluid-11 -> oppstrøms/fluid-11 * [ny gren] fox_7.1 -> oppstrøms/rev_7.1 * [ny gren] hentai-rika -> oppstrøms/hentai-rika * [ny gren] ion-pai -> oppstrøms/ion-pie * [ny gren] avstamning-15.1 -> oppstrøms/avstamning-15.1 * [ny gren] avstamning -17.1 -> oppstrøms/slekt-17.1 * [ny gren] avstamning-18.1 -> oppstrøms/avstamning-18.1 * [ny gren] avstamning-18.1_teos -> oppstrøms/avstamning-18.1_teos * [ny gren] avstamning-19.0 - > upstream/lineage-19.0 * [new branch] main -> upstream/main * [new branch] mkn-mr1 -> upstream/mkn-mr1 * [new branch] revengeos-r11.0 -> upstream/revengeos-r11.0. 1 * [ny gren] stellar-S1 -> oppstrøms/stellar-S11 * [ny gren] teos-n -> oppstrøms/teos-n * [ny gren] weebprosjekt-11 -> oppstrøms/weebprosjekt-XNUMX ✓ Klonet gaffel
Du ser at jeg ikke brukte "-b cm-14.1" og gjorde det lange argumentet i stedet. Fra datoen for denne artikkelen, 16. februar 2022, har GH en feil om at den ikke sender korte argumenter til Git CLI på riktig måte, og derfor må det gjøres som lange argumenter i stedet.
Når det er gjort, gikk du regelmessig inn i mappen, gjorde endringene dine, forpliktet og presset den, og er klar til å gjøre pull-forespørsel. For dette er alt du trenger en enkel
$ gh pr create --branch="cm-14.1" Oppretter pull request for wz414-labs:cm-14.1 til cm-14.1 i windowz414/platform_manifest ? Tittelteos: Bytte til Git-Polycule ? Kropp ? Hva blir det neste? Send inn https://github.com/windowz414/platform_manifest/pull/1
Hvis du ikke legger til “–branch=cm-14.1”, vil du skape PR mot “hovedgrenen”, noe som selvfølgelig vil forårsake problemer når det ikke blir håndtert riktig.
Og nå må jeg slå sammen denne PR, ikke sant? Så jeg kloner først repoen, går til grenen som er tildelt, og lister opp PR-er først.
# Kloning først. $ git clone https://github.com/windowz414/platform_manifest Kloning inn i 'platform_manifest'... ekstern: Oppregning av objekter: 136, ferdig. fjernkontroll: Telle objekter: 100 % (136/136), ferdig. fjernkontroll: Komprimering av objekter: 100 % (81/81), ferdig. fjernkontroll: Totalt 136 (delta 46), gjenbrukt 89 (delta 12), pakke gjenbrukt 0 Mottakende objekter: 100 % (136/136), 30.70 KiB | 137.00 KiB/s, ferdig. Løse deltaer: 100 % (46/46), ferdig. # Så sjekker du ut til filialen. $ git checkout cm-14.1 branch 'cm-14.1' satt opp for å spore 'origin/cm-14.1'. Byttet til en ny gren 'cm-14.1' # Og viser nå PR-er. $ gh pr liste Viser 1 av 1 åpen pull-forespørsel i windowz414/platform_manifest #1 teos: Bytt til Git-Polycule wz414-labs:cm-14.1
Nå som vi ser at det er en PR for å endre fjernkontrollen til "Git-Polycule", la oss se hva som har endret seg med den.
$ 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 @@
Virker lovende! På tide å slå sammen!
$ gh pr fusjon 1 ? Hvilken sammenslåingsmetode vil du bruke? Rebase og slå sammen? Hva blir det neste? Send inn ✓ Rebasert og sammenslått pull-forespørsel #1 (teos: Endre til Git-Polycule)
Nå som jeg slo den sammen, kan du slette gaffelen din.
$ gh repo slett --bekreft wz414-labs/platform_manifest ✓ Slettet depot wz414-labs/platform_manifest
Du ser at rett opp slettet repoen uten bekreftelsesforespørsel fordi jeg passerte "–bekreft" parameteren der. Hvis du ikke bestod det, ville du fått dette:
$ gh repo slette windowsz414/systemd? Skriv windowsz414/systemd for å bekrefte sletting:
Og du må skrive inn hele reponavnet. Sløsing med tid…
Oppsummering
Enkelt sagt er `gh` en ganske forenklet Git CLI/Curl wrapper som forener enkle Git-operasjoner og GitHub API-ting under samme tak. Hvordan bruker du det? Ser det lovende ut for deg som det gjør for meg? Ser frem til å høre fra deg!