אם השתמשת ב-GitHub והעדפת את שורת הפקודה כמוני כדי לעשות הכל בלי שום סיבוכים ב-GUI, אולי שמת לב איך GitHub התחיל להשתמש בכלי הלא כל כך חדש שלהם בשם "gh". החלטתי לנסות, כי בכל זאת זה נראה מבטיח. ואני אישית אהבתי את זה מאוד - כל כך רציתי לעשות על זה מאמר!
לפני שנתחיל, אני צריך להסביר כמה מונחים שבהם אשתמש במאמר זה.
"GH" מייצג "GitHub". מכאן גם מקור השם של הכלי, כך שלא ניתן לבלבל אותו עם Git עצמו. כדי להסביר מה זה עושה באופן כללי, אתה יכול ליצור, לחלק, למחוק, לעיין במאגרים; ליצור בקשות משיכה; ועוד רבים. במקרה שאינך יכול למצוא פיצ'ר אבל גם לא רוצה לעזוב את הטרמינל, הוא גם מספק דפדפן מבוסס טקסט כדי שתוכל לגלוש בדפים ב- GitHub.
"CLI" מייצג "Cאומנד LIne Iממשק". המסוף הזה (או ב-Windows, שורת הפקודה) הוא אחד מהם. אם יש "CLI" שמצורף ליד שם אפליקציה ("Git CLI" עבור מאמר זה), זה אומר שהאפליקציה פועלת דרך המסוף בלבד. ו-"Git CLI" בהקשר הזה הוא, ובכן, ה-Git שאנו מכירים. כמו הפקודה שאנו עושים איתה commits או rebases.
GUI קיצור של "Gרפאלי Uלראות Interface" וזה הממשק בו אנו "מנווטים". מוטב לומר, סביבת שולחן עבודה באופן כללי היא GUI.
"מפתח API" הוא סוג של מחרוזת/קובץ סודי שאתה משתמש בו כדי לאמת לשירותים. היזהר שהוא עוקף אימות דו גורם וכן הלאה כשאתה מאמת איתו. אז הקפידו לשמור אותם בטוחים ובמקום שהוא מחוץ להישג יד באמצעים אחרים.
קודם כל מה זה הכלי הזה? איך הוא מטפל בפעולות שהיינו עושים דרך Git CLI?
"gh" יכול להיחשב כקוד פתוח (קוד מקור) עטיפה באמצעות Git CLI עצמה וממשקי API של GitHub כדי לבצע דברים. למעשה, אתה אפילו יכול להעביר פרמטרים לפקודות Git שבהן הוא משתמש! אני אכנס אליהם בהמשך.
התקנה והתקנה
זכור שאני אעבור על ההתקנה באמצעות Termux. אבל הפרוצדורה אמורה להיות פחות או יותר זהה לזה שאתה יכול לעשות בהפצה מבוססת דביאן - אובונטו יש את זה במאגר הרשמי שלהם למשל. עבור 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! windowsz414/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 * [ענף חדש] שושלת -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 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 * [ענף חדש] שושלת -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 ? Title Teos: לשנות ל-Git-Polycule? גוּף ? מה הלאה? שלח https://github.com/windowz414/platform_manifest/pull/1
אם לא תצרף "–branch=cm-14.1", היית יוצר יחסי ציבור לכיוון סניף "ראשי", מה שכמובן יגרום לבעיות כאשר זה לא יטופל נכון.
ועכשיו, אני צריך למזג את יחסי הציבור הזה, נכון? אז תחילה אני משכפל את ה-repo, קופה לסניף שהוקצה, ורשום תחילה את יחסי הציבור.
# שיבוט ראשון. $ 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 branch 'cm-14.1' מוגדר לעקוב אחר 'origin/cm-14.1'. עבר לסניף חדש 'cm-14.1' # ועכשיו רשום יחסי ציבור. $ gh pr list מציג 1 מתוך 1 בקשת משיכה פתוחה ב-windowz414/platform_manifest #1 teos: Change to 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 מבוססת מחדש וממזגת (תוספות: שנה ל-Git-Polycule)
עכשיו כשמיזתי אותו, אתה יכול למחוק את המזלג שלך.
$ gh repo delete --confirm wz414-labs/platform_manifest ✓ מחיקת מאגר wz414-labs/platform_manifest
אתה רואה שישר מחק את ה-repo ללא בקשת אישור כי העברתי שם את הפרמטר "–confirm". אם לא היית עובר את זה, היית מקבל את זה:
$ gh repo למחוק את windowsz414/systemd ? הקלד windowz414/systemd כדי לאשר את המחיקה:
ואתה תצטרך להקליד את כל שם הריפו. בזבוז זמן…
<br> סיכום
במילים פשוטות, `gh` הוא מעטפת Git CLI/Curl פשוטה למדי המאחדת פעולות פשוטות של Git ודברים של GitHub API תחת אותה קורת גג. איך מנצלים אותו? זה נראה לך מבטיח כמו שזה נראה לי? מצפה לשמוע ממך!