Als je GitHub gebruikt en net als ik de voorkeur geeft aan de opdrachtregel om alles gedaan te krijgen zonder enige complicaties op de GUI, is het je misschien opgevallen hoe GitHub hun niet zo nieuwe tool genaamd “gh” begon te gebruiken. Ik besloot het een kans te geven, omdat het er toch veelbelovend uitzag. En ik vond het persoonlijk erg leuk – zo leuk dat ik er een artikel over wilde maken!
Voordat we echter beginnen, moet ik verschillende termen uitleggen die ik in dit artikel ga gebruiken.
“GH” staat voor “GitHub”. Dit is ook waar de naam van het hulpmiddel vandaan komt, dus het kan niet verward worden met Git zelf. Om uit te leggen wat het in het algemeen doet, kunt u repo's maken, splitsen, verwijderen en doorzoeken; pull-aanvragen maken; en nog veel meer. Als je een functie niet kunt vinden, maar de terminal ook niet wilt verlaten, biedt het ook een op tekst gebaseerde browser waarmee je door pagina's in GitHub kunt bladeren.
“CLI” staat voor “Cbevel LINE Iinterface”. Die Terminal (of in Windows, Command Prompt) is er een van. Als er een “CLI” is toegevoegd naast een app-naam (“Git CLI” voor dit artikel), betekent dit dat de app alleen via de terminal werkt. En “Git CLI” is in deze context, nou ja, de Git die we kennen. Zoals het commando waarmee we commits of rebases maken.
GUI staat voor “Graphisch Uzien Interface” en het is de interface waarop we “navigeren”. Beter gezegd: een desktopomgeving is over het algemeen een GUI.
Een “API-sleutel” is een soort geheime tekenreeks/bestand dat u gebruikt om u bij services te authenticeren. Houd er rekening mee dat het 2-factor-authenticatie en dergelijke omzeilt wanneer u zich ermee authenticeert. Zorg er dus voor dat u ze veilig bewaart, op een plek waar u ze op geen enkele andere manier kunt bereiken.
Allereerst: wat is dit hulpmiddel? Hoe gaat het om met bewerkingen die we via Git CLI zouden uitvoeren?
“gh” kan worden beschouwd als een open source (Source Code) wrapper die Git CLI zelf en GitHub API's gebruikt om dingen voor elkaar te krijgen. Je kunt zelfs parameters doorgeven aan de Git-commando's die het gebruikt! Ik zal daar later op ingaan.
Installeren en instellen
Houd er rekening mee dat ik de installatie zal doorlopen met behulp van Termux. Maar de procedure zou vrijwel hetzelfde moeten zijn als die je zou kunnen hebben op een op Debian gebaseerde distro - Ubuntu heeft het bijvoorbeeld op hun officiële repository's. Voor Windows heb je CygWin of WSL nodig, neem ik aan. ¯\_(ツ)_/¯
# Laten we eerst de tool installeren. Ik installeer ook Git omdat dit de backend # voor gh is. $ pkg install git gh -y # Vervolgens moeten we ons eerst authenticeren. Hierdoor wordt een # nieuwe API-sleutel in de database van de tool opgeslagen, zodat u # niet opnieuw hoeft te authenticeren. Als je GITHUB_TOKEN al hebt ingesteld, werkt dit niet, dus schakel het eerst # uit. :) $ gh auth-aanmelding
Voordat we hier verder gaan, moet ik op een aantal dingen wijzen.
- Allereerst kies niet “GitHub Enterprise Server” als je niet over een soort zelfgehoste GitHub beschikt.
- Tweede gebruik SSH in plaats van HTTPS als u uw openbare sleutel aan uw GitHub-account hebt toegevoegd. Als u de API-sleutel verliest, verliest u in ieder geval uw SSH-sleutel niet, dus het kan ook een goede terugvalmethode zijn.
- Ten derde kies je voor inloggen met browser alleen als je geen API-sleutel bij de hand hebt! Het zou eigenlijk geen zin hebben om nog een sleutel te hebben terwijl je er al een hebt.
Als je klaar bent met het instellen, laten we Git CLI erover vertellen.
$gh auth setup-git
Dit zal de noodzakelijke Git CLI-configuraties maken voor het geval je reflexen binnenstormen en ervoor zorgen dat je Git gebruikt in plaats van GH.
Enkele basiscommando's
Nu je GH hebt ingesteld, wil ik je in verhaalvorm enkele basiscommando's leren.
Laten we allereerst zeggen dat u een pull-verzoek wilt maken naar mijn lokale opslagplaats voor manifesten. Je wilt het eerst vorken.
$ gh repo-vork windowz414/platform_manifest! windowz414/platform_manifest bestaat al? Wil je de vork klonen? Ja Klonen naar 'platform_manifest'... op afstand: Objecten opsommen: 136, klaar. op afstand: Objecten tellen: 100% (136/136), klaar. op afstand: objecten comprimeren: 100% (81/81), klaar. op afstand: Totaal 136 (delta 46), hergebruikt 89 (delta 12), pack-hergebruikt 0 Ontvangende objecten: 100% (136/136), 30.70 KiB | 166.00 KiB/s, klaar. Delta's oplossen: 100% (46/46), klaar. Upstream bijwerken Van github.com:windowz414/platform_manifest * [nieuwe branch] amyrom/rosie -> upstream/amyrom/rosie * [nieuwe branch] aosp-eleven -> upstream/aosp-eleven * [nieuwe branch] aosp-ten -> stroomopwaarts/aosp-ten * [nieuwe tak] arrow-11.0 -> stroomopwaarts/pijl-11.0 * [nieuwe tak] cm-14.1 -> stroomopwaarts/cm-14.1 * [nieuwe tak] dot11 -> stroomopwaarts/dot11 * [nieuwe tak ] e/os/v1-nougat -> upstream/e/os/v1-nougat * [nieuwe tak] fluïdum-11 -> upstream/fluid-11 * [nieuwe tak] fox_7.1 -> upstream/fox_7.1 * [nieuwe tak] hentai-rika -> stroomopwaarts/hentai-rika * [nieuwe tak] ion-pie -> stroomopwaarts/ion-pie * [nieuwe tak] lijn-15.1 -> stroomopwaarts/lijn-15.1 * [nieuwe tak] lijn -17.1 -> stroomopwaarts/lijn-17.1 * [nieuwe tak] lijn-18.1 -> stroomopwaarts/lijn-18.1 * [nieuwe tak] lijn-18.1_teos -> stroomopwaarts/lijn-18.1_teos * [nieuwe tak] lijn-19.0 - > stroomopwaarts/lijn-19.0 * [nieuwe tak] hoofd -> stroomopwaarts/hoofd * [nieuwe tak] mkn-mr1 -> stroomopwaarts/mkn-mr1 * [nieuwe tak] wraakos-r11.0 -> stroomopwaarts/revengeos-r11.0. 1 * [nieuwe tak] stellar-S1 -> upstream/stellar-S11 * [nieuwe tak] teos-n -> upstream/teos-n * [nieuwe tak] weebprojekt-11 -> upstream/weebprojekt-XNUMX ✓ Gekloonde vork
Laten we dan zeggen dat u een aparte organisatie voor uw experimenten heeft, genaamd “wz414-labs”, die u nog niet op uw persoonlijke profiel heeft vastgelegd en die u daar wilt klonen en in plaats daarvan een pull-verzoek wilt openen. Je wilt ook de “cm-14.1” branch klonen, zodat je er niet opnieuw git-checkout naar hoeft uit te voeren.
$ gh repo fork windowz414/platform_manifest --org="wz414-labs" -- --branch="cm-14.1" ✓ Fork wz414-labs/platform_manifest gemaakt? Wil je de vork klonen? Ja Klonen naar 'platform_manifest'... op afstand: Objecten opsommen: 136, klaar. op afstand: Objecten tellen: 100% (136/136), klaar. op afstand: objecten comprimeren: 100% (81/81), klaar. op afstand: Totaal 136 (delta 46), hergebruikt 89 (delta 12), pack-hergebruikt 0 Ontvangende objecten: 100% (136/136), 30.70 KiB | 120.00 KiB/s, klaar. Delta's oplossen: 100% (46/46), klaar. Upstream bijwerken Van github.com:windowz414/platform_manifest * [nieuwe branch] amyrom/rosie -> upstream/amyrom/rosie * [nieuwe branch] aosp-eleven -> upstream/aosp-eleven * [nieuwe branch] aosp-ten -> stroomopwaarts/aosp-ten * [nieuwe tak] arrow-11.0 -> stroomopwaarts/pijl-11.0 * [nieuwe tak] cm-14.1 -> stroomopwaarts/cm-14.1 * [nieuwe tak] dot11 -> stroomopwaarts/dot11 * [nieuwe tak ] e/os/v1-nougat -> upstream/e/os/v1-nougat * [nieuwe tak] fluïdum-11 -> upstream/fluid-11 * [nieuwe tak] fox_7.1 -> upstream/fox_7.1 * [nieuwe tak] hentai-rika -> stroomopwaarts/hentai-rika * [nieuwe tak] ion-pie -> stroomopwaarts/ion-pie * [nieuwe tak] lijn-15.1 -> stroomopwaarts/lijn-15.1 * [nieuwe tak] lijn -17.1 -> stroomopwaarts/lijn-17.1 * [nieuwe tak] lijn-18.1 -> stroomopwaarts/lijn-18.1 * [nieuwe tak] lijn-18.1_teos -> stroomopwaarts/lijn-18.1_teos * [nieuwe tak] lijn-19.0 - > stroomopwaarts/lijn-19.0 * [nieuwe tak] hoofd -> stroomopwaarts/hoofd * [nieuwe tak] mkn-mr1 -> stroomopwaarts/mkn-mr1 * [nieuwe tak] wraakos-r11.0 -> stroomopwaarts/revengeos-r11.0. 1 * [nieuwe tak] stellar-S1 -> upstream/stellar-S11 * [nieuwe tak] teos-n -> upstream/teos-n * [nieuwe tak] weebprojekt-11 -> upstream/weebprojekt-XNUMX ✓ Gekloonde vork
Zie je, ik heb “-b cm-14.1” niet gebruikt en in plaats daarvan het lange argument gebruikt. Vanaf de datum van dit artikel, 16 februari 2022, heeft GH een bug waardoor het korte argumenten niet correct doorgeeft aan Git CLI en daarom moet het in plaats daarvan als lange argumenten worden gedaan.
Zodra dat is gebeurd, hebt u regelmatig de map geopend, uw wijzigingen aangebracht, vastgelegd en vervolgens gepusht, en bent u klaar om een pull-verzoek uit te voeren. Hiervoor heb je alleen maar een simpel
$ gh pr create --branch="cm-14.1" Pull-verzoek voor wz414-labs:cm-14.1 maken in cm-14.1 in windowz414/platform_manifest? Titel teos: Wijzigen naar Git-Polycule? Lichaam ? Wat is het volgende? Verzend https://github.com/windowz414/platform_manifest/pull/1
Als je “–branch=cm-14.1” niet toevoegt, creëer je PR richting de “main” branch, wat natuurlijk problemen zal veroorzaken als het niet goed wordt afgehandeld.
En nu moet ik deze PR samenvoegen, toch? Dus ik kloon eerst de repository, betaal naar het toegewezen filiaal en vermeld eerst de PR's.
# Eerst klonen. $ git clone https://github.com/windowz414/platform_manifest Klonen naar 'platform_manifest'... op afstand: Objecten opsommen: 136, klaar. op afstand: Objecten tellen: 100% (136/136), klaar. op afstand: objecten comprimeren: 100% (81/81), klaar. op afstand: Totaal 136 (delta 46), hergebruikt 89 (delta 12), pack-hergebruikt 0 Ontvangende objecten: 100% (136/136), 30.70 KiB | 137.00 KiB/s, klaar. Delta's oplossen: 100% (46/46), klaar. # Vervolgens uitchecken bij het filiaal. $ git checkout cm-14.1 branch 'cm-14.1' ingesteld om 'origin/cm-14.1' bij te houden. Overgestapt naar een nieuwe tak 'cm-14.1' # En nu PR's vermelden. $ gh pr list Toont 1 van 1 open pull-verzoek in windowz414/platform_manifest #1 teos: Wijzig naar Git-Polycule wz414-labs:cm-14.1
Nu we zien dat er een PR is om de afstandsbediening te veranderen in “Git-Polycule”, laten we eens kijken wat ermee veranderd is.
$ 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 @@
Klinkt veelbelovend! Tijd om te fuseren!
$ gh pr samenvoegen 1 ? Welke samenvoegmethode wilt u gebruiken? Herbasen en samenvoegen? Wat is het volgende? Verzenden ✓ Opnieuw gebaseerd en samengevoegd pull-verzoek #1 (teos: wijziging naar Git-Polycule)
Nu ik het heb samengevoegd, kun je je fork verwijderen.
$ gh repo delete --confirm wz414-labs/platform_manifest ✓ Verwijderde repository wz414-labs/platform_manifest
Je ziet dat de repository meteen is verwijderd zonder bevestigingsverzoek, omdat ik daar de parameter “–confirm” heb doorgegeven. Als je er niet doorheen zou komen, zou je dit krijgen:
$ gh repository verwijder windowz414/systemd? Typ windowz414/systemd om de verwijdering te bevestigen:
En u zou de hele repositorynaam moeten typen. Tijdverspilling…
Samenvatting
Simpel gezegd is `gh` een behoorlijk vereenvoudigde Git CLI/Curl-wrapper die eenvoudige Git-bewerkingen en GitHub API-dingen onder één dak verenigt. Hoe gebruik je het? Ziet het er voor jou veelbelovend uit, net als voor mij? Hoop van je te horen!