Το εύκολο στη χρήση εργαλείο γραμμής εντολών του GitHub: "gh"!

Εάν χρησιμοποιείτε το GitHub και προτιμάτε τη γραμμή εντολών όπως εγώ για να γίνονται όλα χωρίς επιπλοκές στο GUI, ίσως έχετε παρατηρήσει πώς το GitHub άρχισε να χρησιμοποιεί το όχι και τόσο νέο εργαλείο του που ονομάζεται "gh". Αποφάσισα να το δοκιμάσω, γιατί τελικά φαινόταν πολλά υποσχόμενο. Και προσωπικά μου άρεσε πολύ – τόσο πολύ που ήθελα να κάνω ένα άρθρο για αυτό!

Πριν ξεκινήσουμε όμως, πρέπει να εξηγήσω αρκετούς όρους που θα χρησιμοποιήσω σε αυτό το άρθρο.

Το "GH" σημαίνει "GitHub”. Από αυτό προέρχεται και το όνομα του εργαλείου, επομένως δεν μπορεί να συγχέεται με το ίδιο το Git. Για να εξηγήσετε τι κάνει γενικά, μπορείτε να δημιουργήσετε, να διαχωρίσετε, να διαγράψετε, να περιηγηθείτε σε repos. δημιουργία αιτημάτων έλξης. και πολλά άλλα. Σε περίπτωση που δεν μπορείτε να βρείτε μια δυνατότητα αλλά δεν θέλετε να αποχωρήσετε από το τερματικό, παρέχει επίσης ένα πρόγραμμα περιήγησης που βασίζεται σε κείμενο για να περιηγηθείτε σε σελίδες στο GitHub.

Το "CLI" σημαίνει "Cωμ Line Iδιεπαφή». Αυτό το Terminal (ή στα Windows, Command Prompt) είναι ένα από αυτά. Εάν υπάρχει ένα "CLI" προσαρτημένο δίπλα σε ένα όνομα εφαρμογής ("Git CLI" για αυτό το άρθρο), σημαίνει ότι η εφαρμογή εκτελείται μόνο μέσω τερματικού. Και το "Git CLI" σε αυτό το πλαίσιο είναι, λοιπόν, το Git που γνωρίζουμε. Όπως η εντολή με την οποία κάνουμε commits ή rebases.

Το GUI σημαίνει "Gραφικός Uδείτε Interface» και είναι η διεπαφή στην οποία «πλοηγούμαστε». Καλύτερα, ένα περιβάλλον επιφάνειας εργασίας γενικά είναι ένα GUI.

Ένα "κλειδί API" είναι κάποιο είδος μυστικής συμβολοσειράς/αρχείου που χρησιμοποιείτε για τον έλεγχο ταυτότητας στις υπηρεσίες. Προσέξτε ότι παρακάμπτει τον έλεγχο ταυτότητας 2 παραγόντων και ούτω καθεξής όταν κάνετε έλεγχο ταυτότητας με αυτό. Φροντίστε λοιπόν να τα κρατάτε ασφαλή και σε μέρη που δεν είναι προσβάσιμα με άλλα μέσα.

Πρώτα απ 'όλα, τι είναι αυτό το εργαλείο; Πώς χειρίζεται τις λειτουργίες που θα κάναμε μέσω του Git CLI;

Το "gh" μπορεί να θεωρηθεί ως ανοιχτού κώδικα (Πρωτογενής κώδικας) περιτύλιγμα που χρησιμοποιεί το ίδιο το Git CLI και τα API GitHub για να ολοκληρώσει τα πράγματα. Στην πραγματικότητα, μπορείτε ακόμη και να περάσετε παραμέτρους στις εντολές Git που χρησιμοποιεί! Θα μπω σε αυτά αργότερα.

Εγκατάσταση και ρύθμιση

Λάβετε υπόψη ότι θα προχωρήσω στην εγκατάσταση χρησιμοποιώντας termux. Αλλά η διαδικασία θα πρέπει να είναι σχεδόν ίδια με αυτήν που θα μπορούσατε να έχετε σε μια διανομή που βασίζεται στο Debian – το Ubuntu το έχει στα επίσημα repos του για παράδειγμα. Για Windows, λοιπόν, χρειάζεστε είτε CygWin είτε WSL υποθέτω. ¯\_(ツ)_/¯

# Ας εγκαταστήσουμε πρώτα το εργαλείο. Εγκαθιστώντας επίσης το Git καθώς είναι το backend # για το gh. $ pkg εγκατάσταση git gh -y # Στη συνέχεια, πριν από όλα, πρέπει να κάνουμε έλεγχο ταυτότητας. Αυτό θα αποθηκεύσει ένα # νέο κλειδί API στη βάση δεδομένων του εργαλείου, ώστε να μην χρειαστεί να ελέγξετε ξανά την ταυτότητα #. Εάν έχετε ήδη ρυθμίσει το GITHUB_TOKEN, αυτό δεν θα λειτουργήσει, οπότε καταργήστε πρώτα το # το. :) $ gh auth login

Τώρα, πριν συνεχίσουμε εδώ, πρέπει να επισημάνω αρκετά πράγματα.

  • Πρώτα, μην επιλέξετε "GitHub Enterprise Server" εάν δεν έχετε κάποιου είδους αυτο-φιλοξενούμενο GitHub.
  • Δεύτερον, χρησιμοποιήστε SSH αντί για HTTPS εάν έχετε προσθέσει το δημόσιο κλειδί σας στον λογαριασμό σας στο GitHub. Σε περίπτωση που χάσετε το κλειδί API, τουλάχιστον δεν θα χάσετε το κλειδί SSH, ώστε να είναι επίσης μια καλή εναλλακτική μέθοδος.
  • Τρίτον, επιλέξτε τη σύνδεση με το πρόγραμμα περιήγησης μόνο αν δεν έχετε διαθέσιμο κλειδί API! Πραγματικά, δεν θα είχε νόημα να έχετε άλλο κλειδί ενώ έχετε ήδη ένα.

Μόλις ολοκληρώσετε τη ρύθμιση, ας ενημερώσουμε το Git CLI σχετικά.

$ gh auth setup-git

Αυτό θα κάνει τις απαραίτητες διαμορφώσεις Git CLI σε περίπτωση που τα αντανακλαστικά σας μπουν μέσα και σας κάνει να χρησιμοποιήσετε το Git αντί για το GH.

Μερικές βασικές εντολές

Τώρα που ρυθμίσατε το GH, επιτρέψτε μου να σας διδάξω πολλές βασικές εντολές σε μια ιστορία.

Πρώτα απ 'όλα, ας υποθέσουμε ότι θέλετε να δημιουργήσετε ένα αίτημα έλξης στο αποθετήριο τοπικών δηλώσεων μου. Θέλετε να το πιρουνώσετε πρώτα.

$ gh repo fork windowz414/platform_manifest ! Το windowz414/platform_manifest υπάρχει ήδη; Θα θέλατε να κλωνοποιήσετε το πιρούνι; Ναι Κλωνοποίηση στο 'platform_manifest'... απομακρυσμένο: Αριθμός αντικειμένων: 136, ολοκληρώθηκε. τηλεχειριστήριο: Καταμέτρηση αντικειμένων: 100% (136/136), ολοκληρωθεί. τηλεχειριστήριο: Συμπίεση αντικειμένων: 100% (81/81), ολοκληρώθηκε. τηλεχειριστήριο: Σύνολο 136 (δέλτα 46), επαναχρησιμοποίηση 89 (δέλτα 12), συσκευασία-επαναχρησιμοποίηση 0 Αντικείμενα λήψης: 100% (136/136), 30.70 KiB | 166.00 KiB/s, τελειωμένο. Επίλυση δέλτα: 100% (46/46), έχει ολοκληρωθεί. Ενημέρωση upstream Από github.com:windowz414/platform_manifest * [νέος κλάδος] amyrom/rosie -> upstream/amyrom/rosie * [νέος κλάδος] aosp-eleven -> upstream/aosp-eleven * [νέος κλάδος] aosp-ten -> upstream/aosp-ten * [new branch] arrow-11.0 -> upstream/arrow-11.0 * [new 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 * [νέος κλάδος] hentai-rika -> upstream/hentai-rika * [νέος κλάδος] ion-pie -> upstream/ion-pie * [νέος κλάδος] lineage-15.1 -> upstream/lineage-15.1 * [νέος κλάδος] 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 * [νέος κλάδος] stellar-S1 -> upstream/stellar-S11 * [new branch] teos-n -> upstream/teos-n * [new branch] weebprojekt-11 -> upstream/weebprojekt-XNUMX ✓ Cloned fork

Έπειτα, ας υποθέσουμε ότι έχετε μια ξεχωριστή οργάνωση για τα πειράματά σας που ονομάζεται "wz414-labs", την οποία δεν έχετε καταχωρήσει ακόμα στο προσωπικό σας προφίλ και θέλετε να κλωνοποιήσετε εκεί και, στη συνέχεια, ανοίξτε το αίτημα έλξης από εκεί. Θέλετε επίσης να κλωνοποιήσετε τον κλάδο "cm-14.1", ώστε να μην χρειαστεί να του κάνετε ξανά git-checkout.

$ gh repo fork windowz414/platform_manifest --org="wz414-labs" -- --branch="cm-14.1" ✓ Δημιουργήθηκε το fork wz414-labs/platform_manifest ; Θα θέλατε να κλωνοποιήσετε το πιρούνι; Ναι Κλωνοποίηση στο 'platform_manifest'... απομακρυσμένο: Αριθμός αντικειμένων: 136, ολοκληρώθηκε. τηλεχειριστήριο: Καταμέτρηση αντικειμένων: 100% (136/136), ολοκληρωθεί. τηλεχειριστήριο: Συμπίεση αντικειμένων: 100% (81/81), ολοκληρώθηκε. τηλεχειριστήριο: Σύνολο 136 (δέλτα 46), επαναχρησιμοποίηση 89 (δέλτα 12), συσκευασία-επαναχρησιμοποίηση 0 Αντικείμενα λήψης: 100% (136/136), 30.70 KiB | 120.00 KiB/s, τελειωμένο. Επίλυση δέλτα: 100% (46/46), έχει ολοκληρωθεί. Ενημέρωση upstream Από github.com:windowz414/platform_manifest * [νέος κλάδος] amyrom/rosie -> upstream/amyrom/rosie * [νέος κλάδος] aosp-eleven -> upstream/aosp-eleven * [νέος κλάδος] aosp-ten -> upstream/aosp-ten * [new branch] arrow-11.0 -> upstream/arrow-11.0 * [new 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 * [νέος κλάδος] hentai-rika -> upstream/hentai-rika * [νέος κλάδος] ion-pie -> upstream/ion-pie * [νέος κλάδος] lineage-15.1 -> upstream/lineage-15.1 * [νέος κλάδος] 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 * [νέος κλάδος] stellar-S1 -> upstream/stellar-S11 * [new branch] teos-n -> upstream/teos-n * [new branch] weebprojekt-11 -> upstream/weebprojekt-XNUMX ✓ Cloned fork

Βλέπετε δεν χρησιμοποίησα το "-b cm-14.1" και αντ' αυτού έκανα τη μεγάλη επιχειρηματολογία. Από την ημερομηνία αυτού του άρθρου, 16 Φεβρουαρίου 2022, η GH έχει ένα σφάλμα ότι δεν μεταβιβάζει σωστά τα σύντομα ορίσματα στο Git CLI και επομένως πρέπει να γίνει ως μεγάλα ορίσματα.

Μόλις γίνει αυτό, εισαγάγατε τακτικά στο φάκελο, κάνατε τις αλλαγές σας, δεσμεύσατε και μετά τον προωθήσατε και είστε έτοιμοι να κάνετε αίτημα έλξης. Για αυτό, το μόνο που χρειάζεστε είναι ένα απλό

$ gh pr δημιουργία --branch="cm-14.1" Δημιουργία αιτήματος έλξης για wz414-labs:cm-14.1 σε cm-14.1 στο windowz414/platform_manifest ; Τίτλος teos: Αλλαγή σε Git-Polycule ; Σώμα ? Τι έπεται? Υποβολή https://github.com/windowz414/platform_manifest/pull/1

Εάν δεν προσαρτήσετε το "–branch=cm-14.1", θα δημιουργήσατε PR προς τον "κύριο" κλάδο, το οποίο φυσικά θα προκαλέσει προβλήματα όταν δεν αντιμετωπιστεί σωστά.

Και τώρα, πρέπει να συγχωνεύσω αυτό το PR, σωστά; Έτσι, πρώτα κλωνοποιώ το repo, κάνω ταμείο στο υποκατάστημα που έχει εκχωρηθεί και απαριθμώ πρώτα τα PR.

# Κλωνοποίηση πρώτα. $ git clone https://github.com/windowz414/platform_manifest Κλωνοποίηση στο 'platform_manifest'... απομακρυσμένο: Αριθμός αντικειμένων: 136, ολοκληρώθηκε. τηλεχειριστήριο: Καταμέτρηση αντικειμένων: 100% (136/136), ολοκληρωθεί. τηλεχειριστήριο: Συμπίεση αντικειμένων: 100% (81/81), ολοκληρώθηκε. τηλεχειριστήριο: Σύνολο 136 (δέλτα 46), επαναχρησιμοποίηση 89 (δέλτα 12), συσκευασία-επαναχρησιμοποίηση 0 Αντικείμενα λήψης: 100% (136/136), 30.70 KiB | 137.00 KiB/s, τελειωμένο. Επίλυση δέλτα: 100% (46/46), έχει ολοκληρωθεί. # Στη συνέχεια, check out στο υποκατάστημα. $ git checkout cm-14.1 υποκατάστημα 'cm-14.1' που έχει ρυθμιστεί για παρακολούθηση 'origin/cm-14.1'. Μετάβαση σε νέο κλάδο 'cm-14.1' # Και τώρα καταχωρούνται τα PR. $ gh pr list Εμφάνιση 1 από 1 ανοιχτό αίτημα έλξης στο windowz414/platform_manifest #1 teos: Αλλαγή σε Git-Polycule wz414-labs:cm-14.1

Τώρα που βλέπουμε ότι υπάρχει ένα PR για αλλαγή του τηλεχειριστηρίου σε "Git-Polycule", ας δούμε τι έχει αλλάξει με αυτό.

$ gh pr διαφορά 1 διαφορά --git a/teos.xml b/teos.xml index b145fc0..3aadeb6 100644 --- a/teos.xml +++ b/teos.xml @@ -2,7 +2,7, 414 @@ 

Φαίνεται πολλά υποσχόμενο! Ώρα για συγχώνευση!

$ gh pr συγχώνευση 1 ? Ποια μέθοδο συγχώνευσης θα θέλατε να χρησιμοποιήσετε; Επαναφορά και συγχώνευση ; Τι έπεται? Υποβολή ✓ Επαναβασισμένο και συγχωνευμένο αίτημα έλξης #1 (teos: Αλλαγή σε Git-Polycule)

Τώρα που το ένωσα, μπορείτε να διαγράψετε το πιρούνι σας.

$ gh repo delete --confirm wz414-labs/platform_manifest ✓ Διαγραμμένο αποθετήριο wz414-labs/platform_manifest

Βλέπετε ότι κατ' ευθείαν διέγραψε το repo χωρίς αίτημα επιβεβαίωσης επειδή πέρασα την παράμετρο "–επιβεβαίωση" εκεί. Αν δεν το περνούσες, θα έπαιρνες αυτό:

$ gh repo διαγραφή windowz414/systemd ? Πληκτρολογήστε windowz414/systemd για να επιβεβαιώσετε τη διαγραφή:

Και θα χρειαστεί να πληκτρολογήσετε ολόκληρο το όνομα repo. Χάσιμο χρόνου…

Χαρακτηριστικά

Με απλά λόγια, το `gh` είναι ένα αρκετά απλοποιημένο Git CLI/Curl wrapper που ενοποιεί απλές λειτουργίες Git και πράγματα GitHub API κάτω από την ίδια στέγη. Πώς το αξιοποιείς; Σου φαίνεται πολλά υποσχόμενο όπως σε εμένα; Ανυπομονούμε να ακούσουμε από εσάς!

Σχετικά άρθρα