إذا كنت تستخدم GitHub وتفضل سطر الأوامر مثلي لإنجاز كل شيء دون أي تعقيدات على واجهة المستخدم الرسومية، فربما لاحظت كيف بدأ GitHub في استخدام أداته غير الجديدة التي تسمى "gh". قررت أن أجربه، لأنه بدا واعدًا على كل حال. وأنا شخصياً أحببته كثيراً – لدرجة أنني أردت أن أكتب مقالاً عنه!
قبل أن نبدأ، أحتاج إلى شرح العديد من المصطلحات التي سأستخدمها في هذه المقالة.
"GH" تعني "GitHيو بي”. هذا هو المكان الذي نشأ منه اسم الأداة أيضًا، لذلك لا يمكن الخلط بينه وبين Git نفسه. لشرح ما يفعله بشكل عام، يمكنك إنشاء مستودعات إعادة الشراء أو تفرعها أو حذفها أو تصفحها؛ إنشاء طلبات السحب؛ و أكثر من ذلك بكثير. في حالة عدم تمكنك من العثور على إحدى الميزات ولكنك لا تريد أيضًا مغادرة الوحدة الطرفية، فإنها توفر أيضًا متصفحًا قائمًا على النص لتصفح الصفحات في GitHub.
"CLI" تعني "Cأمر Lالمعهد الوطني للإحصاء Iواجهة". تلك الوحدة الطرفية (أو موجه الأوامر في نظام التشغيل Windows) هي واحدة منها. إذا كان هناك "CLI" ملحقًا بجوار اسم التطبيق ("Git CLI" لهذه المقالة)، فهذا يعني أن التطبيق يعمل من خلال الوحدة الطرفية فقط. و"Git CLI" في هذا السياق هو Git الذي نعرفه. مثل الأمر الذي نلتزم به أو نعيد قواعده.
واجهة المستخدم الرسومية تعني "Gرابحي Uأن تكون Interface" وهي الواجهة التي "نتنقل" عليها. ومن الأفضل أن نقول إن بيئة سطح المكتب بشكل عام هي واجهة المستخدم الرسومية.
"مفتاح API" هو نوع من السلسلة/الملف السري الذي تستخدمه للمصادقة على الخدمات. احذر من أنه يتجاوز المصادقة الثنائية وما إلى ذلك عند المصادقة باستخدامه. لذا تأكد من الحفاظ على سلامتهم وفي مكان بعيد عن متناولهم بوسائل أخرى.
بداية ما هي هذه الأداة؟ كيف يتعامل مع العمليات التي سنقوم بها من خلال Git CLI؟
يمكن اعتبار "gh" مصدرًا مفتوحًا (المصدر مدونة) باستخدام برنامج Git CLI نفسه وواجهات برمجة تطبيقات GitHub لإنجاز الأمور. في الواقع، يمكنك أيضًا تمرير المعلمات إلى أوامر Git التي يستخدمها! سوف ندخل في تلك في وقت لاحق.
التثبيت والإعداد
ضع في اعتبارك أنني سأقوم بالتثبيت باستخدام Termux. لكن الإجراء يجب أن يكون إلى حد كبير نفس الإجراء الذي يمكن أن تتبعه في التوزيعة المستندة إلى Debian - على سبيل المثال، تمتلك Ubuntu ذلك في اتفاقيات إعادة الشراء الرسمية الخاصة بها. بالنسبة لنظام التشغيل Windows، حسنًا، فأنت بحاجة إلى CygWin أو WSL على ما أعتقد. ¯\_(ツ)_/¯
# لنقم بتثبيت الأداة أولاً. قم أيضًا بتثبيت Git لأنه الواجهة الخلفية لـ gh. $ pkg install git gh -y # ثم قبل كل شيء، نحتاج إلى المصادقة. سيؤدي هذا إلى حفظ # مفتاح API جديد في قاعدة بيانات الأداة، لذا لن تحتاج إلى مصادقة # مرة أخرى. إذا قمت بالفعل بتعيين GITHUB_TOKEN، فلن ينجح هذا، لذا قم بإلغاء تعيينه أولاً. :) $ مصادقة تسجيل الدخول
والآن، قبل أن نواصل هنا، أريد أن أشير إلى عدة أشياء.
- أولا، لا تختار "GitHub Enterprise Server" إذا لم يكن لديك نوع من GitHub مستضاف ذاتيًا.
- ثانيا، استخدم SSH بدلاً من HTTPS إذا كان لديك مفتاح عام مضاف إلى حساب GitHub الخاص بك. في حالة فقدان مفتاح واجهة برمجة التطبيقات، فلن تفقد مفتاح SSH على الأقل، لذا يمكن أن يكون طريقة احتياطية جيدة أيضًا.
- ثالثاً: اختر تسجيل الدخول بالمتصفح فقط إذا لم يكن لديك مفتاح API في متناول اليد! حقًا، لن يكون من المنطقي أن يكون لديك مفتاح آخر بينما لديك مفتاحًا بالفعل.
بمجرد الانتهاء من إعداد الأشياء، دعنا نخبر Git CLI بذلك.
$ gh auth setup-git
سيؤدي هذا إلى إجراء تكوينات Git CLI الضرورية فقط في حالة تدخل ردود أفعالك وجعلك تستخدم Git بدلاً من GH.
بعض الأوامر الأساسية
الآن بعد أن قمت بإعداد GH، دعني أعلمك عدة أوامر أساسية على أساس القصة.
أولاً، لنفترض أنك تريد إنشاء طلب سحب إلى مستودع البيانات المحلي الخاص بي. تريد شوكة أولا.
$ gh الريبو شوكة 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 -> المنبع/aosp-ten * [فرع جديد] السهم-11.0 -> المنبع/السهم-11.0 * [الفرع الجديد] cm-14.1 -> المنبع/cm-14.1 * [الفرع الجديد] dot11 -> المنبع/dot11 * [فرع جديد ] e/os/v1-nougat -> upstream/e/os/v1-nougat * [فرع جديد] Fluid-11 -> upstream/fluid-11 * [فرع جديد] fox_7.1 -> upstream/fox_7.1 * [فرع جديد] هنتاي ريكا -> المنبع/هنتاي ريكا * [الفرع الجديد] فطيرة الأيون -> المنبع/فطيرة الأيون * [الفرع الجديد] النسب-15.1 -> المنبع/النسب-15.1 * [الفرع الجديد] النسب -17.1 -> المنبع/النسب-17.1 * [الفرع الجديد] النسب-18.1 -> المنبع/النسب-18.1 * [الفرع الجديد] النسب-18.1_teos -> المنبع/النسب-18.1_teos * [الفرع الجديد] النسب-19.0 - > المنبع/النسب-19.0 * [الفرع الجديد] الرئيسي -> المنبع/الرئيسي * [الفرع الجديد] mkn-mr1 -> المنبع/mkn-mr1 * [الفرع الجديد] الانتقام-r11.0 -> المنبع/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 له مرة أخرى.
$ 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 -> المنبع/aosp-ten * [فرع جديد] السهم-11.0 -> المنبع/السهم-11.0 * [الفرع الجديد] cm-14.1 -> المنبع/cm-14.1 * [الفرع الجديد] dot11 -> المنبع/dot11 * [فرع جديد ] e/os/v1-nougat -> upstream/e/os/v1-nougat * [فرع جديد] Fluid-11 -> upstream/fluid-11 * [فرع جديد] fox_7.1 -> upstream/fox_7.1 * [فرع جديد] هنتاي ريكا -> المنبع/هنتاي ريكا * [الفرع الجديد] فطيرة الأيون -> المنبع/فطيرة الأيون * [الفرع الجديد] النسب-15.1 -> المنبع/النسب-15.1 * [الفرع الجديد] النسب -17.1 -> المنبع/النسب-17.1 * [الفرع الجديد] النسب-18.1 -> المنبع/النسب-18.1 * [الفرع الجديد] النسب-18.1_teos -> المنبع/النسب-18.1_teos * [الفرع الجديد] النسب-19.0 - > المنبع/النسب-19.0 * [الفرع الجديد] الرئيسي -> المنبع/الرئيسي * [الفرع الجديد] mkn-mr1 -> المنبع/mkn-mr1 * [الفرع الجديد] الانتقام-r11.0 -> المنبع/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؟ عنوان العنوان: التغيير إلى Git-Polycule؟ جسم ؟ ماذا بعد؟ أرسل https://github.com/windowz414/platform_manifest/pull/1
إذا لم تقم بإلحاق "–branch=cm-14.1"، فستقوم بإنشاء علاقات عامة تجاه الفرع "الرئيسي"، وهو ما سيؤدي بالطبع إلى حدوث مشكلات عندما لا يتم التعامل معه بشكل صحيح.
والآن، أنا بحاجة إلى دمج هذه العلاقات العامة، أليس كذلك؟ لذلك قمت أولاً باستنساخ الريبو، والخروج من الفرع المعين، وإدراج العلاقات العامة أولاً.
# الاستنساخ أولا. $ 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' # والآن يتم إدراج العلاقات العامة. قائمة $ gh pr تعرض 1 من 1 طلب سحب مفتوح في 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 Index b145fc0..3aadeb6 100644 --- a/teos.xml +++ b/teos.xml @@ -2,7 +2,7, 414 @@
يبدو واعدا! حان الوقت للاندماج!
$ gh العلاقات العامة دمج 1 ? ما هي طريقة الدمج التي تريد استخدامها؟ إعادة الأساس والدمج؟ ماذا بعد؟ إرسال ✓ طلب السحب المُعاد دمجه رقم 1 (teos: التغيير إلى Git-Polycule)
والآن بعد أن قمت بدمجها، يمكنك حذف الشوكة الخاصة بك.
حذف الريبو $ gh - تأكيد wz414-labs/platform_manifest ✓ المستودع المحذوف wz414-labs/platform_manifest
ترى أنه تم حذف الريبو مباشرة بدون طلب تأكيد لأنني قمت بتمرير المعلمة "–confirm" هناك. إذا لم تمر عليه، سوف تحصل على هذا:
$ gh الريبو حذف windowz414/systemd؟ اكتب windowz414/systemd لتأكيد الحذف:
وستحتاج إلى كتابة اسم الريبو بالكامل. إضاعة الوقت…
الملخص
ببساطة، `gh` عبارة عن غلاف Git CLI/Curl مبسط جدًا يوحد عمليات Git البسيطة وأشياء GitHub API تحت سقف واحد. كيف يمكنك الاستفادة منه؟ هل يبدو الأمر واعدًا بالنسبة لك كما هو بالنسبة لي؟ انتظر ردك!