หากคุณใช้ GitHub และต้องการให้บรรทัดคำสั่งเช่นฉันทำทุกอย่างให้เสร็จสิ้นโดยไม่มีความยุ่งยากใด ๆ บน GUI คุณอาจสังเกตเห็นว่า GitHub เริ่มใช้เครื่องมือที่ไม่ใหม่ที่เรียกว่า "gh" ได้อย่างไร ฉันตัดสินใจลองดูเพราะมันดูมีแนวโน้มดี และโดยส่วนตัวแล้วฉันชอบมันมาก – มากจนฉันอยากจะเขียนบทความเกี่ยวกับเรื่องนี้!
ก่อนที่เราจะเริ่ม ฉันต้องอธิบายคำศัพท์หลายคำที่จะใช้ในบทความนี้ก่อน
“GH” ย่อมาจาก “GitHอุ๊บ” นี่คือที่มาของชื่อของเครื่องมือ ดังนั้นจึงอย่าสับสนกับ Git เอง เพื่ออธิบายว่ามันทำอะไรโดยทั่วไป คุณสามารถสร้าง แยก ลบ เรียกดู repos; สร้างคำขอดึง และอื่น ๆ อีกมากมาย. ในกรณีที่คุณไม่พบฟีเจอร์แต่ไม่ต้องการออกจากเทอร์มินัล ก็มีเบราว์เซอร์แบบข้อความให้คุณเรียกดูหน้าต่างๆ ใน GitHub ได้
“คลี” ย่อมาจาก “Cคำสั่ง LINE Iอินเทอร์เฟซ” Terminal นั้น (หรือใน Windows, Command Prompt) ก็เป็นหนึ่งในนั้น หากมี “CLI” ต่อท้ายชื่อแอป (“Git CLI” สำหรับบทความนี้) แสดงว่าแอปทำงานผ่านเทอร์มินัลเท่านั้น และ “Git CLI” ในบริบทนี้ก็คือ Git ที่เรารู้จัก เช่นเดียวกับคำสั่งที่เรากระทำหรือรีบูตด้วย
GUI ย่อมาจาก “Gเพ้อเจ้อ USer Iอินเทอร์เฟซ" และมันคืออินเทอร์เฟซที่เรา "นำทาง" พูดได้ดีกว่าว่าสภาพแวดล้อมเดสก์ท็อปโดยทั่วไปคือ GUI
“คีย์ API” คือสตริง/ไฟล์ลับบางประเภทที่คุณใช้ในการตรวจสอบสิทธิ์บริการ ระวังว่าจะข้ามการตรวจสอบสิทธิ์แบบ 2 ปัจจัยและอื่นๆ เมื่อคุณตรวจสอบสิทธิ์ด้วย ดังนั้นควรเก็บพวกมันไว้อย่างปลอดภัยและอยู่ในที่ที่ห่างไกลจากวิธีอื่น
ก่อนอื่นเลย เครื่องมือนี้คืออะไร? มันจัดการกับการดำเนินงานที่เราจะทำผ่าน Git CLI ได้อย่างไร
“gh” ถือได้ว่าเป็นโอเพ่นซอร์ส (รหัสที่มา) wrapper ใช้ Git CLI เองและ GitHub API เพื่อทำงานต่างๆ ให้สำเร็จ ที่จริงแล้ว คุณยังสามารถส่งพารามิเตอร์ไปยังคำสั่ง Git ที่ใช้ได้อีกด้วย! ฉันจะพูดถึงสิ่งเหล่านั้นในภายหลัง
การติดตั้งและตั้งค่า
โปรดทราบว่าฉันจะทำการติดตั้งโดยใช้ Termux. แต่ขั้นตอนควรจะค่อนข้างเหมือนกับที่คุณมีใน distro ที่ใช้ Debian - Ubuntu มีไว้ใน repos อย่างเป็นทางการของพวกเขา สำหรับ Windows คุณต้องมี CygWin หรือ WSL ฉันคิดว่า !\_(ツ)_/¯
#มาติดตั้งเครื่องมือกันก่อน ติดตั้ง Git ด้วยเนื่องจากเป็นแบ็กเอนด์ # สำหรับ gh $ pkg ติดตั้ง git gh -y # ก่อนอื่นเราต้องตรวจสอบสิทธิ์ การดำเนินการนี้จะบันทึกคีย์ API # รายการใหม่ไว้ในฐานข้อมูลของเครื่องมือ ดังนั้นคุณไม่จำเป็นต้องตรวจสอบสิทธิ์ # อีกครั้ง หากคุณได้ตั้งค่า GITHUB_TOKEN แล้ว การดำเนินการนี้จะใช้งานไม่ได้ ดังนั้นให้ยกเลิกการตั้งค่า # ก่อน :) $ gh เข้าสู่ระบบรับรองความถูกต้อง
ก่อนที่เราจะไปต่อที่นี่ ผมต้องชี้ให้เห็นหลายสิ่งหลายอย่าง
- ประการแรก อย่าเลือก “เซิร์ฟเวอร์ GitHub Enterprise” หากคุณไม่มี GitHub ที่โฮสต์เอง
- ประการที่สอง ใช้ SSH แทน HTTPS หากคุณเพิ่มรหัสสาธารณะในบัญชี GitHub ของคุณ ในกรณีที่คุณทำคีย์ API หาย อย่างน้อยคุณก็จะไม่สูญเสียคีย์ SSH ของคุณ ดังนั้นจึงสามารถใช้เป็นวิธีสำรองที่ดีได้เช่นกัน
- ประการที่สาม เลือกเข้าสู่ระบบด้วยเบราว์เซอร์ เฉพาะในกรณีที่คุณไม่มีคีย์ API อยู่ในมือ! จริงๆ แล้วมันไม่สมเหตุสมผลเลยที่จะมีกุญแจอีกอันในขณะที่คุณมีกุญแจอยู่แล้ว
เมื่อคุณตั้งค่าเสร็จแล้ว มาบอก Git CLI เกี่ยวกับเรื่องนี้กันดีกว่า
$ gh การตั้งค่าการตรวจสอบสิทธิ์-git
สิ่งนี้จะทำให้การกำหนดค่า Git CLI ที่จำเป็นในกรณีที่การตอบสนองของคุณเข้ามาและทำให้คุณใช้ Git แทน GH
คำสั่งพื้นฐานบางอย่าง
ตอนนี้คุณได้ตั้งค่า GH แล้ว ฉันจะสอนคำสั่งพื้นฐานหลายคำสั่งให้คุณทราบเป็นเรื่องราว
ก่อนอื่น สมมติว่าคุณต้องการสร้างคำขอดึงไปยัง repo รายการในพื้นที่ของฉัน คุณต้องการที่จะแยกมันก่อน
$ gh repo ส้อม 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) เสร็จแล้ว กำลังอัปเดตอัปสตรีมจาก 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" ✓ สร้าง 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) เสร็จแล้ว กำลังอัปเดตอัปสตรีมจาก 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: เปลี่ยนเป็น Git-Polycule ? ร่างกาย ? อะไรต่อไป? ส่ง https://github.com/windowz414/platform_manifest/pull/1
หากคุณไม่ต่อท้าย “–branch=cm-14.1” คุณจะสร้าง PR ไปยังสาขา “main” ซึ่งแน่นอนว่าจะทำให้เกิดปัญหาเมื่อไม่ได้รับการจัดการอย่างถูกต้อง
และตอนนี้ฉันต้องรวม 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) เสร็จแล้ว #จากนั้นไปตรวจสอบที่สาขา $ git checkout cm-14.1 สาขา 'cm-14.1' ตั้งค่าให้ติดตาม 'origin/cm-14.1' ย้ายสาขาใหม่ 'cm-14.1' #และตอนนี้รายการประชาสัมพันธ์ รายการ $ gh pr แสดง 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 b145fc0..3aadeb6 100644 --- a/teos.xml +++ b/teos.xml @@ -2,7 +2,7, 414 @@
ดูเหมือนจะมีแนวโน้ม! ถึงเวลารวมตัว!
$ gh pr รวม 1 ? คุณต้องการใช้วิธีผสานแบบใด รีบูตและรวม ? อะไรต่อไป? ส่ง ✓ คำขอดึงข้อมูลใหม่และรวมเข้าด้วยกัน #1 (teos: เปลี่ยนเป็น Git-Polycule)
เมื่อรวมเข้าด้วยกันแล้ว คุณก็สามารถลบทางแยกของคุณได้
$ gh repo ลบ --ยืนยัน wz414-labs/platform_manifest ✓ พื้นที่เก็บข้อมูลที่ถูกลบ wz414-labs/platform_manifest
คุณจะเห็นว่าลบ repo ทันทีโดยไม่มีคำขอยืนยันเพราะฉันส่งพารามิเตอร์ “–confirm” ที่นั่น ถ้าคุณไม่ผ่าน คุณจะได้สิ่งนี้:
$ gh repo ลบ windowz414/systemd ? พิมพ์ windowz414/systemd เพื่อยืนยันการลบ:
และคุณจะต้องพิมพ์ชื่อ repo ทั้งหมด เสียเวลา…
สรุป
พูดง่ายๆ ก็คือ `gh` เป็น wrapper Git CLI/Curl ที่ค่อนข้างเรียบง่าย ซึ่งรวมการดำเนินการ Git แบบง่าย ๆ และ GitHub API ไว้ภายใต้หลังคาเดียวกัน คุณใช้มันอย่างไร? มันดูมีแนวโน้มสำหรับคุณเหมือนที่ทำกับฉันไหม? รอการตอบกลับจากคุณ!