GitHub-ის მარტივი გამოსაყენებელი ბრძანების სტრიქონის ინსტრუმენტი: „gh“!

თუ თქვენ იყენებდით GitHub-ს და ამჯობინებთ ბრძანების ხაზს, როგორც მე, რომ ყველაფერი შესრულდეს GUI-ზე ყოველგვარი გართულების გარეშე, შესაძლოა შეამჩნიეთ, როგორ დაიწყო GitHub-ის გამოყენება თავისი არც თუ ისე ახალი ინსტრუმენტის სახელწოდებით „gh“. გადავწყვიტე გადამეღო, რადგან პერსპექტიული ჩანდა. და მე პირადად ძალიან მომეწონა - იმდენად, რომ მინდოდა ამის შესახებ სტატიის გაკეთება!

სანამ დავიწყებდეთ, უნდა აგიხსნათ რამდენიმე ტერმინი, რომელსაც ამ სტატიაში გამოვიყენებ.

"GH" ნიშნავს "GitHub”. ინსტრუმენტის სახელიც აქედან იღებს სათავეს, ამიტომ ის არ შეიძლება აგვერიოს თავად Git-თან. იმის ასახსნელად, თუ რას აკეთებს ის ზოგადად, შეგიძლიათ შექმნათ, გაანადგუროთ, წაშალოთ, დაათვალიეროთ რეპო; მოზიდვის მოთხოვნების შექმნა; და მრავალი სხვა. იმ შემთხვევაში, თუ თქვენ ვერ იპოვით ფუნქციას, მაგრამ ასევე არ გსურთ ტერმინალის დატოვება, ის ასევე გთავაზობთ ტექსტზე დაფუძნებულ ბრაუზერს GitHub-ში გვერდების დასათვალიერებლად.

"CLI" ნიშნავს "Cყოვლისმომცველი LIne Iინტერფეისი”. ეს ტერმინალი (ან Windows-ში, Command Prompt) ერთ-ერთი მათგანია. თუ აპის სახელის გვერდით არის დართული „CLI“ („Git CLI“ ამ სტატიისთვის), ეს ნიშნავს, რომ აპლიკაცია მუშაობს მხოლოდ ტერმინალში. და "Git CLI" ამ კონტექსტში არის Git, რომელიც ჩვენ ვიცით. ბრძანების მსგავსად, რომლითაც ჩვენ ვაკეთებთ ვალდებულებებს ან რებაზებს.

GUI ნიშნავს "Gრაფიკული Uვხედავ Interface“ და ეს არის ინტერფეისი, რომელზეც „ნავიგაცია“ გვაქვს. უკეთ რომ ვთქვათ, დესკტოპის გარემო ზოგადად არის GUI.

"API გასაღები" არის ერთგვარი საიდუმლო სტრიქონი/ფაილი, რომელსაც იყენებთ სერვისებში ავთენტიფიკაციისთვის. ფრთხილად იყავით, რომ ის გვერდს აუვლის 2 ფაქტორიან ავთენტიფიკაციას და ასე შემდეგ, როდესაც თქვენ ავტორიზაციას გააკეთებთ. ასე რომ, დარწმუნდით, რომ შეინახეთ ისინი უსაფრთხოდ და სხვა საშუალებებით მიუწვდომელ ადგილას.

პირველ რიგში, რა არის ეს ინსტრუმენტი? როგორ უმკლავდება ის ოპერაციებს, რომლებსაც ჩვენ გავაკეთებდით Git CLI-ის მეშვეობით?

"gh" შეიძლება ჩაითვალოს ღია წყაროდ (კოდის) შეფუთვა, რომელიც იყენებს Git CLI-ს და GitHub API-ებს საქმის შესასრულებლად. სინამდვილეში, თქვენ შეგიძლიათ გადასცეთ პარამეტრები მის მიერ გამოყენებული Git ბრძანებებზე! მე მოგვიანებით შევეხები მათ.

ინსტალაცია და დაყენება

გაითვალისწინეთ, რომ ინსტალაციას გავივლი ტერმინი. მაგრამ პროცედურა უნდა იყოს თითქმის იგივე, რაც შეიძლება გქონდეთ Debian-ზე დაფუძნებულ დისტროზე – მაგალითად, Ubuntu-ს აქვს ეს ოფიციალურ რეპოში. Windows-ისთვის, ვფიქრობ, გჭირდებათ CygWin ან WSL. ¯\_(ツ)_/¯

# ჯერ დავაყენოთ ინსტრუმენტი. ასევე დააინსტალირეთ Git, რადგან ეს არის # backend gh-ისთვის. $ pkg დააინსტალირეთ git gh -y # შემდეგ ყველაფერზე ადრე, ჩვენ გვჭირდება ავთენტიფიკაცია. ეს შეინახავს # ახალ API კლავიშს ხელსაწყოს მონაცემთა ბაზაში, ასე რომ თქვენ აღარ დაგჭირდებათ # ავთენტიფიკაცია ხელახლა. თუ თქვენ უკვე დააყენეთ GITHUB_TOKEN, ეს არ იმუშავებს ისე, რომ ჯერ # გაუქმდეს. :) $ gh ავტორიზაცია შესვლა

ახლა, სანამ აქ გავაგრძელებთ, რამდენიმე რამ უნდა აღვნიშნო.

  • ჯერ ერთი, არ აირჩიოთ „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 უკვე არსებობს? გსურთ ჩანგლის კლონირება? დიახ კლონირება "პლატფორმა_მანიფესტში"... დისტანციური: ობიექტების ჩამოთვლა: 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 Upstream From github.com:windowz414/platform_manifest * [new branch] amyrom/rosie -> upstream/amyrom/rosie * [new branch] aosp-eleven -> upstream/aosp-eleven * [new branch] aosp-ten -> ზემოთ/aosp-ten * [ახალი განშტოება] ისარი-11.0 -> ზემოთ/ისარი-11.0 * [ახალი განშტოება] სმ-14.1 -> ზევით/სმ-14.1 * [ახალი ფილიალი] dot11 -> ზემოთ/წერტილი * [ახალი განშტოება ] e/os/v11-nougat -> ზემოთ/e/os/v1-nougat * [ახალი განშტოება] fluid-1 -> ზემოთ/სითხე-11 * [ახალი ფილიალი] fox_11 -> ზევით/fox_7.1 * [ახალი ფილიალი] ჰენტაი-რიკა -> ზემოთ/ჰენტაი-რიკა * [ახალი ფილიალი] იონ-ღვეზელი -> ზემოთ/იონ-ღვეზელი * [ახალი ფილიალი] lineage-7.1 -> ზემოთ/ხაზი-15.1 * [ახალი ფილიალი] ხაზი -15.1 -> upstream/lineage-17.1 * [new branch] lineage-17.1 -> upstream/lineage-18.1 * [new branch] lineage-18.1_teos -> upstream/lineage-18.1_teos * [new branch] lineage-18.1 - > upstream/lineage-19.0 * [new branch] main -> upstream/main * [new branch] mkn-mr19.0 -> upstream/mkn-mr1 * [new branch] revengeos-r1 -> upstream/revengeos-r11.0. 11.0 * [ახალი ფილიალი] ვარსკვლავური-S1 -> ზემოთ/ვარსკვლავური-S1 * [ახალი განშტოება] teos-n -> ზემოთ/teos-n * [ახალი ფილიალი] weebprojekt-11 -> ზემოთ/weebprojekt-11 ✓ კლონირებული ჩანგალი

დავუშვათ, რომ თქვენ გაქვთ ცალკე ორგანიზაცია თქვენი ექსპერიმენტებისთვის, სახელწოდებით „wz414-labs“, რომელიც ჯერ არ დაგიწერიათ თქვენს პირად პროფილზე და გსურთ იქ კლონირება და ამის ნაცვლად გახსენით pull მოთხოვნა. თქვენ ასევე გსურთ „სმ-14.1“ ფილიალის კლონირება, ასე რომ თქვენ აღარ დაგჭირდებათ მასზე git-checkout-ის გაკეთება.

$ gh repo fork windowz414/platform_manifest --org="wz414-labs" -- --branch="cm-14.1" ✓ შექმნილია ჩანგალი wz414-labs/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 Upstream From github.com:windowz414/platform_manifest * [new branch] amyrom/rosie -> upstream/amyrom/rosie * [new branch] aosp-eleven -> upstream/aosp-eleven * [new branch] aosp-ten -> ზემოთ/aosp-ten * [ახალი განშტოება] ისარი-11.0 -> ზემოთ/ისარი-11.0 * [ახალი განშტოება] სმ-14.1 -> ზევით/სმ-14.1 * [ახალი ფილიალი] dot11 -> ზემოთ/წერტილი * [ახალი განშტოება ] e/os/v11-nougat -> ზემოთ/e/os/v1-nougat * [ახალი განშტოება] fluid-1 -> ზემოთ/სითხე-11 * [ახალი ფილიალი] fox_11 -> ზევით/fox_7.1 * [ახალი ფილიალი] ჰენტაი-რიკა -> ზემოთ/ჰენტაი-რიკა * [ახალი ფილიალი] იონ-ღვეზელი -> ზემოთ/იონ-ღვეზელი * [ახალი ფილიალი] lineage-7.1 -> ზემოთ/ხაზი-15.1 * [ახალი ფილიალი] ხაზი -15.1 -> upstream/lineage-17.1 * [new branch] lineage-17.1 -> upstream/lineage-18.1 * [new branch] lineage-18.1_teos -> upstream/lineage-18.1_teos * [new branch] lineage-18.1 - > upstream/lineage-19.0 * [new branch] main -> upstream/main * [new branch] mkn-mr19.0 -> upstream/mkn-mr1 * [new branch] revengeos-r1 -> upstream/revengeos-r11.0. 11.0 * [ახალი ფილიალი] ვარსკვლავური-S1 -> ზემოთ/ვარსკვლავური-S1 * [ახალი განშტოება] teos-n -> ზემოთ/teos-n * [ახალი ფილიალი] weebprojekt-11 -> ზემოთ/weebprojekt-11 ✓ კლონირებული ჩანგალი

ხედავთ, მე არ გამომიყენებია „-b cm-14.1“ და ამის ნაცვლად გავაკეთე გრძელი არგუმენტი. ამ სტატიის თარიღისთვის, 16 წლის 2022 თებერვალს, GH-ს აქვს შეცდომა, რომ ის არ გადასცემს მოკლე არგუმენტებს Git CLI-ს სწორად და ამიტომ უნდა გაკეთდეს როგორც გრძელი არგუმენტები.

როგორც კი ეს გაკეთდება, თქვენ რეგულარულად შედიხართ საქაღალდეში, გააკეთეთ ცვლილებები, ჩაატარეთ და შემდეგ დააწესეთ და მზად ხართ შეასრულოთ pull-ის მოთხოვნა. ამისათვის ყველაფერი რაც თქვენ გჭირდებათ არის მარტივი

$ gh pr შექმნა --branch="cm-14.1" ვქმნით pull-მოთხოვნის შექმნას 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-ებს.

# კლონირება ჯერ. $ 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), შესრულებულია. # შემდეგ ფილიალში გასვლა. $ git checkout cm-14.1 ფილიალი „cm-14.1“ დაყენებულია „origin/cm-14.1“ თვალყურის დევნებისთვის. გადაერთო ახალ ფილიალზე 'cm-14.1' # და ახლა PR-ების ჩამონათვალი. $ gh pr სია ნაჩვენებია 1-დან 1 ღია pull მოთხოვნა windowz414/platform_manifest #1 teos: შეცვლა Git-Polycule wz414-labs:cm-14.1

ახლა, როდესაც ჩვენ ვხედავთ, რომ არსებობს PR დისტანციური მართვის „Git-Polycule“-ზე გადასვლისთვის, ვნახოთ, რა შეიცვალა მასში.

$ gh pr diff 1 diff --git a/teos.xml b/teos.xml ინდექსი b145fc0..3aadeb6 100644 --- a/teos.xml +++ b/teos.xml @@ -2,7 +2,7, 414 @@ 

პერსპექტიული ჩანს! დროა შერწყმა!

$ gh pr შერწყმა 1 ? რა შერწყმის მეთოდის გამოყენება გსურთ? ხელახალი ბაზა და შერწყმა? Რა არის შემდეგი? გაგზავნა ✓ ხელახლა დაფუძნებული და გაერთიანებული pull მოთხოვნა #1 (teos: შეცვლა Git-Polycule-ზე)

ახლა, როცა გავაერთიანე, შეგიძლიათ წაშალოთ თქვენი ჩანგალი.

$ gh repo delete --დაადასტურეთ wz414-labs/platform_manifest ✓ წაშლილია საცავი wz414-labs/platform_manifest

თქვენ ხედავთ, რომ პირდაპირ წაშალეს რეპო დადასტურების მოთხოვნის გარეშე, რადგან იქ ჩავაბარე "–დადასტურების" პარამეტრი. თუ არ ჩააბარებდი, მიიღებდი ამას:

$ gh repo წაშლა windowz414/systemd? აკრიფეთ windowz414/systemd წაშლის დასადასტურებლად:

და თქვენ უნდა აკრიფოთ მთელი რეპო სახელი. დროის დაკარგვა…

შემაჯამებელი

მარტივად რომ ვთქვათ, `gh` არის საკმაოდ გამარტივებული Git CLI/Curl შეფუთვა, რომელიც აერთიანებს მარტივ Git ოპერაციებსა და GitHub API ნივთებს ერთი და იმავე სახურავის ქვეშ. როგორ იყენებთ მას? პერსპექტიულად გეჩვენება როგორც მე? მოუთმენლად ველი თქვენგან!

დაკავშირებული სტატიები