Sè avete usatu GitHub è preferite a linea di cummanda cum'è mè per fà tuttu senza alcuna cumplicazione in GUI, pudete avè nutatu cumu GitHub hà iniziatu à utilizà a so strumentu micca cusì nova chjamata "gh". Aghju decisu di dà un colpu, perchè pareva promettente dopu tuttu. È personalmente mi piacia assai - Tantu chì vulia fà un articulu nantu à questu!
Prima di principià però, aghju bisognu di spiegà parechji termini chì useraghju in questu articulu.
"GH" sta per "GitHub". Hè quì chì u nome di l'uttellu vene ancu da quì, per quessa ùn pò micca esse cunfunditu cù Git stessu. Per spiegà ciò chì face in generale, pudete creà, furchetta, sguassà, navigà repos; creà richieste di pull; è assai di più. In casu ùn pudete micca truvà una funzione, ma ancu ùn vulete micca lascià u terminal, furnisce ancu un navigatore basatu in testu per voi per navigà e pagine in GitHub.
"CLI" sta per "Ccumanda Line Ininterfaccia". Ddu Terminal (o in Windows, Command Prompt) hè unu di elli. Se ci hè un "CLI" appiccicatu accantu à un nome di l'app ("Git CLI" per questu articulu), significa chì l'app corre solu per u terminal. E "Git CLI" in questu cuntestu hè, bè, u Git chì sapemu. Cum'è u cumandamentu facemu commits o rebases cù.
GUI significa "Grapicu US ser Interface" è hè l'interfaccia chì "navighemu". Megliu dettu, un ambiente desktop in generale hè una GUI.
Una "chiave API" hè una sorta di una stringa / fugliale secreta chì utilizate per autentificà à i servizii. Attenti chì bypassa l'autentificazione di fattore 2 è cusì quandu vi autentificate cun ellu. Dunque, assicuratevi di mantene a sicura è in un locu chì hè fora di portata per altri mezi.
Prima di tuttu, chì hè stu strumentu? Cumu gestisce l'operazioni chì fariamu attraversu Git CLI?
"gh" pò esse cunsideratu cum'è una fonte aperta (Code Source) wrapper utilizendu Git CLI stessu è l'API GitHub per fà e cose. In fatti, pudete ancu passà paràmetri à i cumandamenti Git chì usa! Entreraghju in quelli più tardi.
Installazione è stallazione
Tenite in mente chì andaraghju per l'installazione usendu Termu. Ma a prucedura duveria esse quasi u listessu cum'è pudete avè in una distro basata in Debian - Ubuntu l'hà nantu à i so repositori ufficiali per esempiu. Per Windows, bè, avete bisognu di CygWin o WSL supponu. ¯\_(ツ)_/¯
# Installemu prima l'utillita. Installa ancu Git cum'è u backend # per gh. $ pkg install git gh -y # Allora prima di tuttu, avemu bisognu di autentificà. Questu salvarà una # nova chjave API in a basa di dati di l'uttellu per ùn avè micca bisognu di autentificà # novu. Sè avete digià stabilitu GITHUB_TOKEN, questu ùn funziona micca cusì unset # prima. :) $ gh auth login
Avà, prima di cuntinuà quì, aghju bisognu di indicà parechje cose.
- Prima, vogliu ùn sceglite micca "GitHub Enterprise Server" se ùn avete micca qualchì tipu di GitHub self-hosted.
- Siconda, Aduprate SSH invece di HTTPS se avete a vostra chjave publica aghjuntu à u vostru contu GitHub. In casu chì perde a chjave API, almenu ùn perderà micca a vostra chjave SSH cusì pò esse ancu un bonu metudu di fallback.
- In terzu, sceglite u login cù u navigatore solu sè ùn avete micca una chjave API in manu! Daveru, ùn averia micca sensu per avè una altra chjave mentre avete digià una.
Una volta chì avete finitu di stallà e cose, dicemu à Git CLI.
$ gh auth setup-git
Questu ferà e cunfigurazioni Git CLI necessarie solu in casu chì i vostri riflessi sbarcanu è facenu aduprà Git invece di GH.
Certi cumandamenti basi
Avà chì avete stabilitu GH, lasciami insignà parechji cumandamenti basi in una basa di storia.
Prima di tuttu, dicemu chì vulete creà una dumanda di pull à u mo repo di manifesti lucali. Vulete chjappà prima.
$ gh repo fork windowz414/platform_manifest ! windowz414/platform_manifest esiste digià ? Vulete clonà a furchetta ? Iè Cloning in 'platform_manifest'... remote: Enumerazione di l'uggetti: 136, fattu. luntani: cuntà uggetti: 100% (136/136), fattu. remote: Cumpressione d'uggetti: 100% (81/81), fattu. remote: Total 136 (delta 46), reused 89 (delta 12), pack-reused 0 Riceve oggetti: 100% (136/136), 30.70 KiB | 166.00 KiB/s, fattu. Risoluzione delta: 100% (46/46), fattu. Aghjurnà upstream Da github.com:windowz414/platform_manifest * [new branch] amyrom/rosie -> upstream/amyrom/rosie * [nova branche] aosp-eleven -> upstream/aosp-eleven * [nova branche] aosp-ten -> upstream/aosp-ten * [new branch] arrow-11.0 -> upstream/arrow-11.0 * [nova branch] cm-14.1 -> upstream/cm-14.1 * [new branch] dot11 -> upstream/dot11 * [new branch] ] e/os/v1-nougat -> upstream/e/os/v1-nougat * [new branch] fluid-11 -> upstream/fluid-11 * [new branch] fox_7.1 -> upstream/fox_7.1 * [new branch] hentai-rika -> upstream/hentai-rika * [new branch] ion-pie -> upstream/ion-pie * [new branch] lineage-15.1 -> upstream/lineage-15.1 * [new branch] lineage -17.1 -> upstream/lineage-17.1 * [new branch] lineage-18.1 -> upstream/lineage-18.1 * [new branch] lineage-18.1_teos -> upstream/lineage-18.1_teos * [new branch] lineage-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 * [nova branca] stellar-S1 -> upstream/stellar-S11 * [nova branca] teos-n -> upstream/teos-n * [nova branca] weebprojekt-11 -> upstream/weebprojekt-XNUMX ✓ Forchetta clonata
Allora diciamu chì avete una urganizazione separata per i vostri esperimenti chjamata "wz414-labs", chì ùn avete micca ancora u vostru prufilu persunale è vulete clonà quì, dopu apre a dumanda di pull through quì invece. Vulete ancu clone u ramu "cm-14.1" per ùn avè micca bisognu di fà git-checkout à novu.
$ gh repo fork windowz414/platform_manifest --org="wz414-labs" -- --branch="cm-14.1" ✓ Fork creatu wz414-labs/platform_manifest ? Vulete clonà a furchetta ? Iè Cloning in 'platform_manifest'... remote: Enumerazione di l'uggetti: 136, fattu. luntani: cuntà uggetti: 100% (136/136), fattu. remote: Cumpressione d'uggetti: 100% (81/81), fattu. remote: Total 136 (delta 46), reused 89 (delta 12), pack-reused 0 Riceve oggetti: 100% (136/136), 30.70 KiB | 120.00 KiB/s, fattu. Risoluzione delta: 100% (46/46), fattu. Aghjurnà upstream Da github.com:windowz414/platform_manifest * [new branch] amyrom/rosie -> upstream/amyrom/rosie * [new branch] aosp-eleven -> upstream/aosp-eleven * [new branch] aosp-ten -> upstream/aosp-ten * [nova branche] arrow-11.0 -> upstream/arrow-11.0 * [nova branche] cm-14.1 -> upstream/cm-14.1 * [nova branche] dot11 -> upstream/dot11 * [nova branche] ] e/os/v1-nougat -> upstream/e/os/v1-nougat * [new branch] fluid-11 -> upstream/fluid-11 * [new branch] fox_7.1 -> upstream/fox_7.1 * [new branch] hentai-rika -> upstream/hentai-rika * [new branch] ion-pie -> upstream/ion-pie * [new branch] lineage-15.1 -> upstream/lineage-15.1 * [new branch] lineage -17.1 -> upstream/lineage-17.1 * [new branch] lineage-18.1 -> upstream/lineage-18.1 * [new branch] lineage-18.1_teos -> upstream/lineage-18.1_teos * [new branch] lineage-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 * [nova branca] stellar-S1 -> upstream/stellar-S11 * [nova branca] teos-n -> upstream/teos-n * [nova branca] weebprojekt-11 -> upstream/weebprojekt-XNUMX ✓ Forchetta clonata
Avete vistu chì ùn aghju micca usatu "-b cm-14.1" è hà fattu l'argumentu longu invece. A data di questu articulu, u 16 di ferraghju di u 2022, GH hà un bug chì ùn passa micca brevi argumenti à Git CLI currettamente è cusì deve esse fattu cum'è argumenti longu invece.
Una volta chì hè fattu, avete rigularmente intrutu in u cartulare, hà fattu i vostri cambiamenti, impegnati è poi spintu, è sò pronti à fà pull request. Per questu, tuttu ciò chì avete bisognu hè un simplice
$ gh pr create --branch="cm-14.1" Crià a dumanda di pull per wz414-labs:cm-14.1 in cm-14.1 in windowz414/platform_manifest ? Titulu teos: Cambia à Git-Polycule ? corpu ? Chì ci hè dopu ? Invia https://github.com/windowz414/platform_manifest/pull/1
Se ùn aghjunghje micca "–branch = cm-14.1", avaristi creà PR versu u ramu "principale", chì di sicuru pruvucarà prublemi quandu ùn hè micca trattatu bè.
È avà, aghju bisognu di unisce stu PR, nò? Allora prima clone u repo, checkout à a filiera assignata, è listinu PR prima.
# Cloning prima. $ git clone https://github.com/windowz414/platform_manifest Cloning in 'platform_manifest'... remote: Enumerazione di l'uggetti: 136, fattu. luntani: cuntà uggetti: 100% (136/136), fattu. remote: Cumpressione d'uggetti: 100% (81/81), fattu. remote: Total 136 (delta 46), reused 89 (delta 12), pack-reused 0 Riceve oggetti: 100% (136/136), 30.70 KiB | 137.00 KiB/s, fattu. Risoluzione delta: 100% (46/46), fattu. # Allora verificate à a filiera. $ git checkout cm-14.1 branch 'cm-14.1' set up to track 'origin/cm-14.1'. Cambiatu à un novu ramu 'cm-14.1' # È avà listendu PR. $ gh pr list Mostra 1 di 1 dumanda di pull aperta in windowz414/platform_manifest #1 teos: Cambia à Git-Polycule wz414-labs:cm-14.1
Avà chì vedemu chì ci hè un PR per cambià a distanza in "Git-Polycule", vedemu ciò chì hè cambiatu cun ellu.
$ 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 @@
Sembra promettente! Hè ora di unisce!
$ gh pr merge 1 ? Chì metudu di fusione vulete aduprà? Rebase è unisce ? Chì ci hè dopu ? Invia ✓ Richiesta di pull ribasata è unita #1 (teos: Cambia à Git-Polycule)
Avà chì l'aghju unitu, pudete sguassà u vostru forchetta.
$ gh repo delete --confirm wz414-labs/platform_manifest ✓ Repository eliminatu wz414-labs/platform_manifest
Avete vistu chì u repo hà eliminatu direttamente senza dumanda di cunferma perchè aghju passatu u paràmetru "-confirm". Se ùn avete micca passatu, uttene questu:
$ gh repo sguassate windowz414/systemd ? Type windowz414/systemd per cunfirmà l'eliminazione:
È avete bisognu di scrivite tuttu u nome repo. Perda di tempu…
Suntu
Bastamente, `gh` hè un wrapper Git CLI / Curl abbastanza simplificatu chì unifica l'operazioni Git simplici è e cose API GitHub sottu u stessu tettu. Cumu aduprà? Vi pare promettente cum'è mè? Aspittendu à sente da voi!