Просты ў выкарыстанні інструмент каманднага радка GitHub: “gh”!

Калі вы карыстаецеся GitHub і аддаеце перавагу каманднаму радку, як я, каб рабіць усё без якіх-небудзь ускладненняў з графічным інтэрфейсам, вы маглі заўважыць, як GitHub пачаў выкарыстоўваць свой не вельмі новы інструмент пад назвай «gh». Я вырашыў паспрабаваць, таму што ў рэшце рэшт гэта выглядала шматспадзеўна. А мне асабіста гэта вельмі спадабалася – так, што я хацеў напісаць пра гэта артыкул!

Аднак перш чым мы пачнем, мне трэба растлумачыць некалькі тэрмінаў, якія я буду выкарыстоўваць у гэтым артыкуле.

«GH» азначае «GitHуб». Адсюль і назва інструмента, таму яго нельга зблытаць з самім Git. Каб растлумачыць, што ён робіць увогуле, вы можаце ствараць, раздзяляць, выдаляць, праглядаць рэпазітарыі; ствараць запыты на выцягванне; і многае іншае. Калі вы не можаце знайсці функцыю, але не хочаце пакідаць тэрмінал, ён таксама прапануе тэкставы браўзер для прагляду старонак у GitHub.

«CLI» расшыфроўваецца як «Cоманд Lіне Iінтэрфейс». Гэты тэрмінал (або ў Windows, камандны радок) з'яўляецца адным з іх. Калі побач з назвай праграмы ёсць «CLI» («Git CLI» для гэтага артыкула), гэта азначае, што праграма працуе толькі праз тэрмінал. І «Git CLI» у гэтым кантэксце - гэта, ну, Git, які мы ведаем. Як каманда, з якой мы робім фіксацыі або перабазы.

GUI расшыфроўваецца як «Gрафічны Uпаглядзець Interface” і гэта інтэрфейс, па якім мы “пераходзім”. Прасцей кажучы, асяроддзе працоўнага стала ў цэлым - гэта графічны інтэрфейс.

«Ключ API» - гэта нейкі сакрэтны радок/файл, які вы выкарыстоўваеце для аўтэнтыфікацыі ў сэрвісах. Майце на ўвазе, што ён абыходзіць двухфактарную аўтэнтыфікацыю і гэтак далей, калі вы праходзіце аўтэнтыфікацыю з яго дапамогай. Таму трымайце іх у бяспецы і ў месцах, недаступных іншымі спосабамі.

Перш за ўсё, што гэта за інструмент? Як ён апрацоўвае аперацыі, якія мы выконваем праз Git CLI?

«gh» можна лічыць адкрытым зыходным кодам (Зыходны код) абалонка, якая выкарыстоўвае сам Git CLI і GitHub API для выканання задач. Фактычна, вы нават можаце перадаваць параметры камандам Git, якія ён выкарыстоўвае! Я разбяруся з імі пазней.

Ўстаноўка і налада

Майце на ўвазе, што я правяду ўсталёўку з дапамогай Termux. Але працэдура павінна быць практычна такой жа, як і ў дыстрыбутыве на аснове Debian - напрыклад, Ubuntu мае яе ў сваіх афіцыйных сховішчах. Для Windows, я мяркую, вам патрэбны або CygWin, або WSL. п\_(ツ)_/п

# Давайце спачатку ўсталюем інструмент. Таксама ўсталёўваецца Git, паколькі гэта бэкэнд # для gh. $ pkg install 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 ужо існуе? Вы хочаце кланаваць відэлец? Так Кланіраванне ў 'platform_manifest'... аддаленае: пералік аб'ектаў: ​​136, зроблена. пульт: Падлік аб'ектаў: ​​100% (136/136), зроблена. аддалены: Сцісканне аб'ектаў: ​​100% (81/81), зроблена. дыстанцыйна: Усяго 136 (дэльта 46), паўторна 89 (дэльта 12), упакоўка паўторна 0 Атрыманне аб'ектаў: ​​100% (136/136), 30.70 КіБ | 166.00 КіБ/с, зроблена. Вырашальныя дэльты: 100% (46/46), зроблена. Абнаўленне ўверх па плыні З github.com:windowz414/platform_manifest * [новая галіна] amyrom/rosie -> upstream/amyrom/rosie * [новая галіна] aosp-eleven -> upstream/aosp-eleven * [новая галіна] aosp-ten -> upstream/aosp-ten * [новая галіна] arrow-11.0 -> upstream/arrow-11.0 * [новая галіна] cm-14.1 -> upstream/cm-14.1 * [новая галіна] dot11 -> upstream/dot11 * [новая галіна ] e/os/v1-nougat -> upstream/e/os/v1-nougat * [новая галіна] fluid-11 -> upstream/fluid-11 * [новая галіна] 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 * [новая галіна] lineage-18.1 -> upstream/lineage-18.1 * [новая галіна] lineage-18.1_teos -> upstream/lineage-18.1_teos * [новая галіна] lineage-19.0 - > upstream/lineage-19.0 * [новая галіна] main -> upstream/main * [новая галіна] mkn-mr1 -> upstream/mkn-mr1 * [новая галіна] revengeos-r11.0 -> upstream/revengeos-r11.0. 1 * [новая галіна] stellar-S1 -> upstream/stellar-S11 * [новая галіна] teos-n -> upstream/teos-n * [новая галіна] weebprojekt-11 -> upstream/weebprojekt-XNUMX ✓ Кланаваны форк

Тады дапусцім, што ў вас ёсць асобная арганізацыя для вашых эксперыментаў пад назвай “wz414-labs”, што вы яшчэ не разгалінавалі свой асабісты профіль і хочаце яго кланаваць, а потым адкрыць там запыт на выцягванне. Вы таксама жадаеце кланаваць галінку «cm-14.1», каб вам не трэба было зноў рабіць для яе git-checkout.

$ gh repo fork windowz414/platform_manifest --org="wz414-labs" -- --branch="cm-14.1" ✓ Створаны форк wz414-labs/platform_manifest? Вы хочаце кланаваць відэлец? Так Кланіраванне ў 'platform_manifest'... аддаленае: пералік аб'ектаў: ​​136, зроблена. пульт: Падлік аб'ектаў: ​​100% (136/136), зроблена. аддалены: Сціск аб'ектаў: ​​100% (81/81), зроблена. дыстанцыйна: Усяго 136 (дэльта 46), паўторна 89 (дэльта 12), упакоўка паўторна 0 Атрыманне аб'ектаў: ​​100% (136/136), 30.70 КіБ | 120.00 КіБ/с, гатова. Вырашальныя дэльты: 100% (46/46), зроблена. Абнаўленне ўверх па плыні З github.com:windowz414/platform_manifest * [новая галіна] amyrom/rosie -> upstream/amyrom/rosie * [новая галіна] aosp-eleven -> upstream/aosp-eleven * [новая галіна] aosp-ten -> upstream/aosp-ten * [новая галіна] arrow-11.0 -> upstream/arrow-11.0 * [новая галіна] cm-14.1 -> upstream/cm-14.1 * [новая галіна] dot11 -> upstream/dot11 * [новая галіна ] e/os/v1-nougat -> upstream/e/os/v1-nougat * [новая галіна] fluid-11 -> upstream/fluid-11 * [новая галіна] 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 * [новая галіна] lineage-18.1 -> upstream/lineage-18.1 * [новая галіна] lineage-18.1_teos -> upstream/lineage-18.1_teos * [новая галіна] lineage-19.0 - > upstream/lineage-19.0 * [новая галіна] main -> upstream/main * [новая галіна] mkn-mr1 -> upstream/mkn-mr1 * [новая галіна] revengeos-r11.0 -> upstream/revengeos-r11.0. 1 * [новая галіна] stellar-S1 -> upstream/stellar-S11 * [новая галіна] teos-n -> upstream/teos-n * [новая галіна] weebprojekt-11 -> upstream/weebprojekt-XNUMX ✓ Кланаваны форк

Вы бачыце, што я не выкарыстаў “-b cm-14.1” і зрабіў доўгі аргумент замест гэтага. На момант напісання гэтага артыкула, 16 лютага 2022 г., у GH ёсць памылка, якая заключаецца ў тым, што ён не правільна перадае кароткія аргументы ў Git CLI, і таму замест гэтага трэба рабіць доўгія аргументы.

Пасля таго, як гэта будзе зроблена, вы рэгулярна ўваходзіце ў тэчку, уносіце змены, здзяйсняеце фіксацыю, затым адпраўляеце яе і гатовыя выканаць запыт на выцягванне. Для гэтага вам спатрэбіцца простае

$ gh pr create --branch="cm-14.1" Стварэнне запыту на выцягванне для wz414-labs:cm-14.1 у cm-14.1 у windowz414/platform_manifest? Назва teos: Change to 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 КіБ | 137.00 КіБ/с, зроблена. Вырашальныя дэльты: 100% (46/46), зроблена. # Затым выезд у аддзяленне. $ 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

Цяпер, калі мы бачым, што існуе піяр для змены пульта дыстанцыйнага кіравання на “Git-Polycule”, давайце паглядзім, што з ім змянілася.

$ 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 @@ 

Здаецца шматспадзеўным! Час злівацца!

$ gh pr аб'яднаць 1? Які метад аб'яднання вы хацелі б выкарыстоўваць? Перабазіраваць і аб'яднаць? Што далей? Адправіць ✓ Перааснованы і аб'яднаны запыт на выцягванне №1 (teos: пераход на Git-Polycule)

Цяпер, калі я аб'яднаў яго, вы можаце выдаліць свой форк.

$ gh repo delete --confirm wz414-labs/platform_manifest ✓ Выдалены рэпазітар wz414-labs/platform_manifest

Вы бачыце, што рэпазітар адразу выдаліў без запыту на пацвярджэнне, таму што я перадаў туды параметр «–confirm». Калі вы не пройдзеце яго, вы атрымаеце наступнае:

$ gh repo выдаліць windowz414/systemd? Каб пацвердзіць выдаленне, увядзіце windowz414/systemd:

І вам трэба будзе ўвесці поўнае імя РЭПО. Марнаванне часу…

Рэзюмэ

Прасцей кажучы, `gh` - гэта даволі спрошчаная абалонка Git CLI/Curl, якая аб'ядноўвае простыя аперацыі Git і рэчы GitHub API пад адным дахам. Як вы яго выкарыстоўваеце? Вам гэта здаецца шматспадзеўным, як і мне? Чакаем пачуць ад вас!

Артыкулы па Тэме