Łatwe w użyciu narzędzie wiersza poleceń GitHuba: „gh”!

Jeśli korzystasz z GitHuba i tak jak ja wolisz wiersz poleceń, aby wszystko zrobić bez żadnych komplikacji w GUI, być może zauważyłeś, jak GitHub zaczął wykorzystywać swoje niezbyt nowe narzędzie o nazwie „gh”. Postanowiłem dać mu szansę, bo mimo wszystko wyglądało obiecująco. A mnie osobiście bardzo się to spodobało – tak bardzo, że zapragnęłam zrobić o tym artykuł!

Zanim jednak zaczniemy, muszę wyjaśnić kilka terminów, których będę używać w tym artykule.

„GH” oznacza „GitHub”. Stąd też wzięła się nazwa narzędzia, więc nie można go mylić z samym Gitem. Aby ogólnie wyjaśnić, co robi, możesz tworzyć, rozwidlać, usuwać i przeglądać repozytoria; tworzyć żądania ściągnięcia; i wiele więcej. Jeśli nie możesz znaleźć funkcji, ale nie chcesz opuszczać terminala, udostępnia także przeglądarkę tekstową umożliwiającą przeglądanie stron w GitHub.

„CLI” oznacza „Cpolecenie LIne Iinterfejs”. Ten terminal (lub w systemie Windows wiersz poleceń) jest jednym z nich. Jeśli obok nazwy aplikacji znajduje się „CLI” („Git CLI” w tym artykule), oznacza to, że aplikacja działa tylko przez terminal. A „Git CLI” w tym kontekście to, cóż, Git, którego znamy. Podobnie jak polecenie, za pomocą którego dokonujemy zatwierdzeń lub rebase.

GUI oznacza „Ggraficzny Uzobaczyć Iinterfejs” i jest to interfejs, po którym „nawigujemy”. Lepiej powiedzieć, ogólnie środowisko graficzne to GUI.

„Klucz API” to rodzaj tajnego ciągu/pliku używanego do uwierzytelniania w usługach. Uważaj, że omija uwierzytelnianie dwuskładnikowe i tak dalej, gdy się za jego pomocą uwierzytelniasz. Dlatego pamiętaj, aby przechowywać je w bezpiecznym miejscu, poza zasięgiem w inny sposób.

Po pierwsze, co to za narzędzie? Jak radzi sobie z operacjami, które wykonalibyśmy za pomocą Git CLI?

„gh” można uznać za oprogramowanie typu open source (Kod nieśmiertelności) wrapper wykorzystujący sam interfejs Git CLI i interfejsy API GitHub do wykonywania zadań. W rzeczywistości możesz nawet przekazywać parametry do poleceń Git, których używa! Zajmę się nimi później.

Instalacja i konfiguracja

Pamiętaj, że przejdę przez instalację za pomocą termux. Ale procedura powinna być prawie taka sama, jak w dystrybucji opartej na Debianie – na przykład Ubuntu ma ją w swoich oficjalnych repozytoriach. Cóż, w przypadku systemu Windows potrzebujesz CygWin lub WSL, jak sądzę. ¯\_(ツ)_/¯

# Najpierw zainstalujmy narzędzie. Instaluję także Git, ponieważ jest to backend # dla gh. $ pkg install git gh -y # Przede wszystkim musimy się uwierzytelnić. Spowoduje to zapisanie # nowego klucza API w bazie danych narzędzia, dzięki czemu nie będziesz musiał # ponownie uwierzytelniać. Jeśli już ustawiłeś GITHUB_TOKEN, to nie zadziała, więc najpierw go usuń. :) $ gh autoryzacja logowania

Zanim przejdziemy dalej, muszę zwrócić uwagę na kilka rzeczy.

  • Po pierwsze, nie wybieraj „GitHub Enterprise Server” jeśli nie masz własnego GitHuba.
  • Po drugie, użyj SSH zamiast HTTPS, jeśli masz klucz publiczny dodany do swojego konta GitHub. W przypadku utraty klucza API przynajmniej nie stracisz klucza SSH, więc może to być również dobra metoda awaryjna.
  • Po trzecie wybierz logowanie przez przeglądarkę tylko jeśli nie masz pod ręką klucza API! Naprawdę nie miałoby sensu mieć kolejnego klucza, skoro już go masz.

Kiedy już skończysz konfigurować, powiedzmy o tym Git CLI.

$ gh konfiguracja uwierzytelniania-git

Spowoduje to utworzenie niezbędnych konfiguracji Git CLI na wypadek, gdyby wkroczył Twój refleks i sprawił, że użyjesz Git zamiast GH.

Kilka podstawowych poleceń

Teraz, gdy już skonfigurowałeś GH, pozwól, że nauczę Cię kilku podstawowych poleceń w oparciu o historię.

Po pierwsze, załóżmy, że chcesz utworzyć żądanie ściągnięcia do mojego lokalnego repozytorium manifestów. Najpierw chcesz to rozwidlić.

$ gh widelec repo windowz414/platform_manifest ! windowz414/platform_manifest już istnieje? Czy chcesz sklonować widelec? Tak Klonowanie do „platform_manifest”... zdalne: Wyliczanie obiektów: 136, gotowe. zdalny: Liczenie obiektów: 100% (136/136), zakończone. zdalne: Kompresja obiektów: 100% (81/81), gotowe. zdalne: Razem 136 (delta 46), ponownie użyte 89 (delta 12), ponownie użyte w paczce 0 Odbieranie obiektów: 100% (136/136), 30.70 KiB | 166.00 KiB/s, gotowe. Rozwiązywanie delt: 100% (46/46), gotowe. Aktualizacja upstream Z github.com:windowz414/platform_manifest * [nowa gałąź] amyrom/rosie -> upstream/amyrom/rosie * [nowa gałąź] aosp-eleven -> upstream/aosp-eleven * [nowa gałąź] aosp-ten -> upstream/aosp-ten * [nowa gałąź] strzałka-11.0 -> upstream/arrow-11.0 * [nowa gałąź] cm-14.1 -> upstream/cm-14.1 * [nowa gałąź] dot11 -> upstream/dot11 * [nowa gałąź] ] e/os/v1-nougat -> upstream/e/os/v1-nougat * [nowa gałąź] fluid-11 -> upstream/fluid-11 * [nowa gałąź] fox_7.1 -> upstream/fox_7.1 * [nowa gałąź] hentai-rika -> upstream/hentai-rika * [nowa gałąź] ion-pie -> upstream/ion-pie * [nowa gałąź] lineage-15.1 -> upstream/lineage-15.1 * [nowa gałąź] lineage -17.1 -> upstream/lineage-17.1 * [nowa gałąź] lineage-18.1 -> upstream/lineage-18.1 * [nowa gałąź] lineage-18.1_teos -> upstream/lineage-18.1_teos * [nowa gałąź] lineage-19.0 - > upstream/lineage-19.0 * [nowa gałąź] main -> upstream/main * [nowa gałąź] mkn-mr1 -> upstream/mkn-mr1 * [nowa gałąź] zemsta-r11.0 -> upstream/revengeos-r11.0. 1 * [nowa gałąź] stellar-S1 -> upstream/stellar-S11 * [nowa gałąź] teos-n -> upstream/teos-n * [nowa gałąź] weebprojekt-11 -> upstream/weebprojekt-XNUMX ✓ Sklonowany fork

Następnie załóżmy, że masz oddzielną organizację do swoich eksperymentów o nazwie „wz414-labs”, której jeszcze nie rozwidlałeś na swoim profilu osobistym i chcesz tam sklonować, a następnie zamiast tego otworzyć tam żądanie ściągnięcia. Chcesz także sklonować gałąź „cm-14.1”, więc nie będziesz musiał ponownie wykonywać w niej git-checkout.

$ gh repo fork windowz414/platform_manifest --org="wz414-labs" -- --branch="cm-14.1" ✓ Utworzono fork wz414-labs/platform_manifest ? Czy chcesz sklonować widelec? Tak Klonowanie do „platform_manifest”... zdalne: Wyliczanie obiektów: 136, gotowe. zdalny: Liczenie obiektów: 100% (136/136), zakończone. zdalne: Kompresja obiektów: 100% (81/81), gotowe. zdalne: Razem 136 (delta 46), ponownie użyte 89 (delta 12), ponownie użyte w paczce 0 Odbieranie obiektów: 100% (136/136), 30.70 KiB | 120.00 KiB/s, gotowe. Rozwiązywanie delt: 100% (46/46), gotowe. Aktualizacja upstream Z github.com:windowz414/platform_manifest * [nowa gałąź] amyrom/rosie -> upstream/amyrom/rosie * [nowa gałąź] aosp-eleven -> upstream/aosp-eleven * [nowa gałąź] aosp-ten -> upstream/aosp-ten * [nowa gałąź] strzałka-11.0 -> upstream/arrow-11.0 * [nowa gałąź] cm-14.1 -> upstream/cm-14.1 * [nowa gałąź] dot11 -> upstream/dot11 * [nowa gałąź] ] e/os/v1-nougat -> upstream/e/os/v1-nougat * [nowa gałąź] fluid-11 -> upstream/fluid-11 * [nowa gałąź] fox_7.1 -> upstream/fox_7.1 * [nowa gałąź] hentai-rika -> upstream/hentai-rika * [nowa gałąź] ion-pie -> upstream/ion-pie * [nowa gałąź] lineage-15.1 -> upstream/lineage-15.1 * [nowa gałąź] lineage -17.1 -> upstream/lineage-17.1 * [nowa gałąź] lineage-18.1 -> upstream/lineage-18.1 * [nowa gałąź] lineage-18.1_teos -> upstream/lineage-18.1_teos * [nowa gałąź] lineage-19.0 - > upstream/lineage-19.0 * [nowa gałąź] main -> upstream/main * [nowa gałąź] mkn-mr1 -> upstream/mkn-mr1 * [nowa gałąź] zemsta-r11.0 -> upstream/revengeos-r11.0. 1 * [nowa gałąź] stellar-S1 -> upstream/stellar-S11 * [nowa gałąź] teos-n -> upstream/teos-n * [nowa gałąź] weebprojekt-11 -> upstream/weebprojekt-XNUMX ✓ Sklonowany fork

Widzisz, że nie użyłem „-b cm-14.1” i zamiast tego użyłem długiego argumentu. Od daty tego artykułu, czyli 16 lutego 2022 r., GH ma błąd polegający na tym, że nie przekazuje poprawnie krótkich argumentów do interfejsu CLI Git, dlatego zamiast tego należy to zrobić w postaci długich argumentów.

Gdy już to zrobisz, regularnie wchodzisz do folderu, wprowadzasz zmiany, zatwierdzasz, a następnie przesyłasz je i jesteś gotowy do wykonania żądania ściągnięcia. Do tego wystarczy prosta rzecz

$ gh pr create --branch="cm-14.1" Tworzenie żądania ściągnięcia dla wz414-labs:cm-14.1 do cm-14.1 w windowz414/platform_manifest? Tytuł teos: Zmiana na Git-Polycule? Ciało ? Co dalej? Prześlij https://github.com/windowz414/platform_manifest/pull/1

Jeśli nie dodasz „–branch=cm-14.1”, stworzysz PR w kierunku „głównej” gałęzi, co oczywiście spowoduje problemy, jeśli nie zostanie właściwie obsługiwane.

A teraz muszę połączyć ten PR, prawda? Więc najpierw klonuję repozytorium, kasuję do przypisanego oddziału i najpierw wystawiam PR.

# Najpierw klonowanie. $ git clone https://github.com/windowz414/platform_manifest Klonowanie do „platform_manifest”... zdalne: Wyliczanie obiektów: 136, gotowe. zdalny: Liczenie obiektów: 100% (136/136), zakończone. zdalne: Kompresja obiektów: 100% (81/81), gotowe. zdalne: Razem 136 (delta 46), ponownie użyte 89 (delta 12), ponownie użyte w paczce 0 Odbieranie obiektów: 100% (136/136), 30.70 KiB | 137.00 KiB/s, gotowe. Rozwiązywanie delt: 100% (46/46), gotowe. # Następnie udaj się do oddziału. $ git checkout cm-14.1 gałąź „cm-14.1” skonfigurowana do śledzenia „Origin/cm-14.1”. Przełączono na nowy oddział „cm-14.1” # A teraz wystawiam PR. $ gh pr list Wyświetlanie 1 z 1 otwartego żądania ściągnięcia w windowz414/platform_manifest #1 teos: Zmień na Git-Polycule wz414-labs:cm-14.1

Teraz, gdy widzimy, że istnieje PR dotyczący zmiany pilota na „Git-Polycule”, zobaczmy, co się w związku z tym zmieniło.

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

Wygląda obiecująco! Czas na fuzję!

$ gh pr scalanie 1? Jakiej metody scalania chcesz użyć? Zmiana bazy i scalanie? Co dalej? Prześlij ✓ Ponownie oparte i połączone żądanie ściągnięcia nr 1 (teos: Zmień na Git-Polycule)

Teraz, kiedy to połączyłem, możesz usunąć swój fork.

$ gh repo usuń --confirm wz414-labs/platform_manifest ✓ Usunięto repozytorium wz414-labs/platform_manifest

Widzisz, że od razu usunąłem repozytorium bez prośby o potwierdzenie, ponieważ przekazałem tam parametr „–confirm”. Gdybyś tego nie zdał, dostałbyś to:

$ gh repo usunąć windowz414/systemd? Wpisz windowz414/systemd, aby potwierdzić usunięcie:

I musiałbyś wpisać całą nazwę repozytorium. Strata czasu…

Podsumowanie

Mówiąc najprościej, `gh` to dość uproszczone opakowanie Git CLI/Curl, jednoczące proste operacje Git i funkcje API GitHub pod jednym dachem. Jak z niego korzystasz? Czy wygląda to obiecująco dla ciebie, tak jak dla mnie? Czekam na wiadomość od ciebie!

Powiązane artykuły