00:00:00مرحباً بالجميع. اسمي سكوت شاكون، وأنا المدير التنفيذي لشركة Git Brother.
00:00:02سأقوم بتقديم عرض سريع لواجهة السطور البرمجية (CLI) الجديدة لـ Git Brother.
00:00:06لذا، إذا كنت معتاداً على واجهة السطور البرمجية،
00:00:08وترغب في استخدام Git Brother برمجياً،
00:00:11فإن واجهة Git Brother CLI الجديدة خيار رائع جداً.
00:00:14دعونا نبدأ. حسناً، سنبدأ بمستودع برمجيفي (repository).
00:00:18لدي هذا المشروع الصغير بلغة Rust،
00:00:20وسنستعرض معاً سير العمل في واجهة Git Brother CLI.
00:00:23إنها بديل مباشر لـ Git. فبمجرد تثبيتها،
00:00:27سيصبح أمر “but” هو واجهتك الأساسية بدلاً من Git.
00:00:32يمكنك تشغيل “but” أو “but status”؛ فالأولى مجرد اختصار للثانية.
00:00:35وسيعرض لك الحالة (status).
00:00:38النتائج مشابهة جداً لما يظهر عند تنفيذ أمر Git status.
00:00:41نرى هنا أربعة ملفات معدلة.
00:00:44هناك ملفات غير متتبعة (untracked) وأخرى تم تغييرها.
00:00:47أي بعض الملفات الجديدة وبعض الملفات المعدلة، لكن نتائج “but”،
00:00:50أي الحالة، ستظهر لك قائمة بالأربعة. هذه هي التغييرات، أليس كذلك؟
00:00:55هذه هي الأشياء التي عدلتها. ويمكنك المضي قدماً وحفظها (commit)،
00:00:59بأي طريقة تريدها. ما سنفعله هو تشغيل “but commit”.
00:01:02سيقوم بإنشاء فرع (branch) مؤقت. دعونا نجرب ذلك.
00:01:05وإذا شغلنا “but status” مجدداً، سنرى كل تلك التغييرات في مكان واحد.
00:01:11يمكننا أيضاً تشغيل “but status -F” أو “--files”.
00:01:15وسيعرض لك الملفات التي تم تعديلها في هذا الحفظ.
00:01:18لكن لنفترض أننا لا نريد حفظ كل ذلك في “commit” واحد،
00:01:21أليس كذلك؟ فبعضها متعلق بـ Clod، وواحد لملف readme.
00:01:24وهناك تغييرات فعلية على المشروع. هذه في الحقيقة ثلاثة تغييرات منفصلة،
00:01:28لذا نريدها أن تكون في ثلاث عمليات حفظ منفصلة. دعونا نتراجع عن ذلك.
00:01:31يمكننا إلغاء الحفظ عن طريق تشغيل
00:01:36“uncommit”. والآن عدنا. ما زال لدينا هذا الفرع المؤقت هنا.
00:01:40يمكننا حذفه إذا أردنا، لكن لنقم بإعادة استخدامه.
00:01:44سأقوم بتغيير الاسم. سأسمي الفرع “Clod stuff”.
00:01:48والآن لدي فرع جديد هنا ويمكنني إضافة الملفات إليه (stage)،
00:01:53تماماً مثل أمر git add. يمكننا قول: “but stage G0 H0”.
00:01:58هذه هي الأكواد المختصرة لهذه الملفات.
00:02:01يمكننا أيضاً كتابة المسار بالكامل إذا أردت،
00:02:04لكننا نحاول تسهيل الأمر ليتم بسرعة. والآن إذا نظرنا،
00:02:08سنجدها مضافة لفرع “Clod stuff” ويمكنني الحفظ باستخدام “-O”،
00:02:12مما يعني حفظ ما تمت إضافته فقط. إذا شغلت “commit”،
00:02:15سيحفظ كل ما تمت إضافته وكل ما لم يُضف بعد.
00:02:18سيتضح هذا المعنى أكثر عندما يكون لدينا فروع أكثر،
00:02:20لكن دعونا نحفظ هذا. الآن لدينا فرع يحتوي على حفظ واحد
00:02:25وتغييرين غير مضافين (unstaged).
00:02:28وهنا يصبح الأمر مثيراً للاهتمام، فعلى عكس Git،
00:02:31لنفترض أنني أريد أخذ ملف readme هذا،
00:02:34أريد حفظه ورفعه وفتح طلب سحب (PR) له.
00:02:37في العادة، إذا كنت على فرع “Clod” هنا،
00:02:41سأضطر لتخزين العمل الحالي (stash)، وإضافة ملف readme وحفظه،
00:02:44ثم رفعه لطلب السحب.
00:02:45لكن في Git Brother، يمكننا العمل على فروع متوازية (parallel branches)؛
00:02:50لذا يمكنني كتابة “but branch new readme” وسترون فرعاً جديداً
00:02:55قد تفرع، ويمكنني إضافة ذلك الملف إليه.
00:03:00ويمكنني حفظ ذلك الملف.
00:03:01إذا نظرت إلى الملفات المعدلة،
00:03:07سأجد هذا الحفظ الذي يحتوي على شيئي الـ Clod،
00:03:09ولدي هذا الـ readme مع تغيير واحد فيه. ومرة أخرى،
00:03:11يمكنني فعل الشيء نفسه. يمكنني قول “commit”،
00:03:17و “-c” تعني إنشاء (create)، لذا يمكنني إنشاء فرع جديد بهذه الطريقة. وأريد أن أقول،
00:03:21دعونا نرى ما الذي غيرناه هنا فعلاً. لقد نسيت. أوه،
00:03:25أمر القراءة (read command) هذا. حسناً.
00:03:27سيأخذ ذلك آخر شيء غير محفوظ، أو أي شيء غير محفوظ حالياً،
00:03:32ويسمح لك بإنشاء فرع جديد وحفظه فيه.
00:03:35والآن نرى أن لدينا ثلاثة فروع.
00:03:38كلها مستقلة عن بعضها البعض.
00:03:39وكل تلك التغييرات لا تزال في مجلد العمل الخاص بنا.
00:03:42لم نغير شيئاً في مجلد العمل على الإطلاق.
00:03:44نحن فقط نقوم بإنشاء عمليات الحفظ (commits) في الذاكرة.
00:03:46والآن يمكنني تشغيل “but push” وسيسألني: ماذا تريد أن ترفع؟
00:03:50هل تريد رفع كل هذه؟ فكل منها لديه عملية حفظ واحدة غير مرفوعة.
00:03:53أم تريد رفع واحد منها فقط؟ لنرفع ملف readme فقط.
00:03:57لنفترض أنه الوحيد الجاهز حالياً.
00:03:59نختاره فقط وسيقوم برفعه.
00:04:02وإذا نظرنا إلى الحالة مجدداً،
00:04:03سنرى أن هذا الملف قد تم رفعه، كما يظهر في الحالة هنا.
00:04:06أما البقية فهي محلية فقط.
00:04:08إذن، يتمتع Git Brother بقوة كبيرة في التعامل مع فروع متعددة
00:04:11في آن واحد. ولكن يمكنه أيضاً التعامل مع الفروع المتراكمة (stacked branches).
00:04:13لنلقِ نظرة على مثال لإنشاء شيء جديد
00:04:17بناءً على أحد عمليات الحفظ التي قمنا بها،
00:04:19عن طريق إنشاء فرع متراكم فوقه.
00:04:20بهذه الطريقة يمكننا دمج الفرع السفلي ومواصلة العمل على العلوي.
00:04:23لنفترض أننا نريد إنشاء فرع متراكم.
00:04:26نريد مراجعة أمر القراءة هذا ودمجه،
00:04:30لكننا نريد مواصلة العمل عليه.
00:04:32هذه نقطة جيدة لاستخدام الفروع المتراكمة بدلاً من الفروع المستقلة
00:04:35بسبب وجود تبعية. والطريقة هي قول:
00:04:38“but branch new -a” كنقطة ارتكاز (anchor)،
00:04:42وهي فرع SC read command، ثم نسمي الجديد SC read more.
00:04:46والآن إذا نظرنا إلى هذا،
00:04:48سنرى أن لدينا هذا الفرع متراكماً في الأعلى.
00:04:50لنمضِ قدماً ونعدل هذا.
00:04:52ونرى أن هذا يأخذ 10 رسائل ويعرضها.
00:04:57سأقوم بتغييرها إلى 20 رسالة، وسأغير هذا أيضاً.
00:05:02ونلاحظ وجود أيقونة قفل لأننا
00:05:09نعدل ملفاً قمنا بحفظه مسبقاً في مكان آخر.
00:05:11لذا فهو مقيد بعملية حفظ معينة.
00:05:13لا يمكننا حفظه إلا فوق ذلك الفرع لأنه يعدل كوداً
00:05:16تم إدخاله هناك. يمكننا رؤية التغييرات عبر أمر “diff”،
00:05:20وهي وسيلة جيدة لرؤية الأجزاء المعدلة، ثم يمكننا
00:05:25المضي قدماً وحفظ التغيير. حسناً.
00:05:28الآن، ولإظهار مدى سهولة تغيير عمليات الحفظ أيضاً،
00:05:32سأعرض لكم كيفية القيام بذلك؛
00:05:33سننفذ “status -F” لرؤية كل الملفات.
00:05:37دعونا نشارك هذا. لقد رأينا بالفعل أمر “push”،
00:05:40الذي يرفع التغييرات إلى المستودع البعيد،
00:05:42لكن يمكننا أيضاً قول “PR” لفتح طلب سحب. لذا يمكننا أن نختار،
00:05:46لأي من هذه الفروع نريد فتح طلبات سحب؟
00:05:48لنقم بفتح طلبات سحب للجميع.
00:05:50سيقوم بفتح محرّر لكل واحد ويسأل:
00:05:54ماذا أريد أن يكون وصف طلب السحب؟ سأبقي الأمر بسيطاً.
00:05:57والآن أصبح لدينا كل طلبات السحب هذه. بعد فتحها،
00:06:01يمكننا رؤية هذه الأرقام هنا: رقم واحد، رقم اثنان...
00:06:04هذه أرقام طلبات السحب والرسائل المرتبطة بها.
00:06:06نحن فقط نستخدم نفس الأرقام في كل مرة.
00:06:08يمكننا أيضاً عبر أمر “-V”،
00:06:10وهو النمط التفصيلي (verbose)، رؤية روابط URL لكل منها.
00:06:12دعونا نلقِ نظرة على أحدها.
00:06:14هذا هو طلب السحب الذي يغير الـ readme، ونرى أنه
00:06:18يحتوي على حفظ واحد فقط وتغيير واحد في ذلك الملف. فهو معزول.
00:06:23وهذا هو الطلب المتراكم.
00:06:24ويمكننا أن نرى عند النظر لأحدها أنه قام
00:06:28بفتح سلسلة متراكمة. فالطلب الأول،
00:06:30وهو طلب السحب السفلي، يستهدف الفرع الرئيسي (main).
00:06:35والطلب الثاني، الذي يمكننا الانتقال إليه هنا، يستهدف الطلب الأول.
00:06:39لذا فهو ينفذ الفروع المتراكمة بشكل صحيح.
00:06:41الآن لنرَ ماذا يحدث عندما ندمج شيئاً ما.
00:06:43لنذهب لطلب سحب الـ readme هذا. يمكننا القول: حسناً،
00:06:46هذا يبدو جيداً. سأقوم بدمجه. لقد أصبح الآن في المستودع الأساسي (upstream).
00:06:49وإذا شغلنا “but pull --check”، فسيقوم بالتحقق.
00:06:55يمكننا أيضاً تشغيل “but fetch” وسينفذ هذا لك.
00:06:57كما أنه يقوم بجلب التحديثات في الخلفية بين الحين والآخر.
00:07:00ربما لاحظتم هذا عند تشغيل بعض الأوامر.
00:07:02يقول البرنامج إنه أطلق عملية في الخلفية، لكننا نرى أن هذا الطلب
00:07:06قد تم دمجه. نراه مدمجاً في المستودع الأساسي. لذا عند تشغيل “but pull”،
00:07:10سيقوم بجلب المعلومات الجديدة.
00:07:13وسيعيد بناء (rebase) فروعنا الأخرى ويزيل هذا الفرع
00:07:16المدمج. يمكننا رؤية أنه قد تم حذفه محلياً.
00:07:19والآن عندما ننظر، نجد أن ذلك الفرع قد انتهى،
00:07:22والبقية تم تحديثها لتتوافق مع الجديد، ويمكننا
00:07:25رفعها مجدداً إذا أردنا. وفي أي وقت،
00:07:29إذا أردت العودة لاستخدام Git فقط، يمكنك قول “but tear down”،
00:07:33وسيقوم باختيار أحد فروعك.
00:07:36وستجد أنه يختار أول فرع كنت عليه،
00:07:39لكن لا تزال لديك كل الفروع التي كنا نعمل عليها هنا.
00:07:43الأمر فقط أن Git العادي لا يمكنه التواجد إلا في فرع واحد. فعدت الآن لواحد فقط.
00:07:47لذا يمكنك استخدام “setup” و “tear down” للدخول والخروج من وضع Git Brother.
00:07:50إذا كنت تريد العمل على فروع متعددة أو مجرد استخدام أدوات Git التقليدية.
00:07:55ولكن مجدداً، حتى في وضع Git Brother، يمكنك استخدام معظم
00:08:00أوامر Git. يمكنك قول “git show” على أحدها، وسيعمل.
00:08:04يمكنك قول “git log” وسيعمل أيضاً.
00:08:08كل أوامر القراءة تعمل بشكل جيد، مثل show و log وغيرها،
00:08:13نحن فقط نقوم بإدارة عمليات الحفظ لك في هذه الحالة.
00:08:16كما يمكنك الانتقال مباشرة لفرع ما وسيدرك Git Brother ذلك
00:08:21ويزيل كل ما كان يفعله. ومرة أخرى،
00:08:24ستكون الأمور على ما يرام.
00:08:26وآخر شيء سأعرضه هو أن كل هذه الأوامر تدعم
00:08:30صيغة JSON. فإذا أردت تشغيل “status” مع خيار “--json”،
00:08:34يمكنك ذلك. وإذا أردت تنفيذ “show” على عملية حفظ مثلاً،
00:08:41يمكنك فعل ذلك أيضاً، فتقريباً كل الأوامر تمتلك هذا الخيار.
00:08:44ويمكنك رؤية جميع الأوامر عبر “but help”، فكلها تقريباً
00:08:48تدعم خيار “--json” أو “-J”.
00:08:52مما يعني أنه يمكنك برمجتها بسهولة. بل ومن المثير للاهتمام
00:08:56أنه يمكنك تنفيذ “diff” والحصول على نسخة JSON من التغييرات،
00:09:00وهو أمر أراه رائعاً جداً.
00:09:01كانت هذه مقدمة جيدة لـ Git Brother وما يمكنه فعله مقارنة
00:09:05بـ Git. ومجدداً، يمكنك إضافته لأي مستودع Git.
00:09:08يمكنك تشغيل “but setup” والبدء في تنفيذ كل هذه الأوامر.
00:09:12يمكنك الحصول على مخرجات JSON، وإدارة فروع متعددة،
00:09:15وإدارة الفروع المتراكمة. ويمكنك أيضاً القيام
00:09:17بالتكامل مع GitHub وإدارة طلبات السحب.
00:09:20كل هذه الأشياء جاهزة للاستخدام بمجرد تشغيل أوامر “but”.
00:09:24وفي أي وقت تريد العودة لـ Git،
00:09:26رغم أن معظم أوامر Git لا تزال تعمل في هذه البيئة،
00:09:29يمكنك فقط إنهاء الوضع أو الانتقال لفرع آخر وسيقوم بتنظيف كل شيء.
00:09:33جربه اليوم!
00:09:35يمكنك الذهاب إلى [gitbrother.com/cli](https://www.google.com/search?q=https://gitbrother.com/cli) وتحميله والبدء في تجربته.
00:09:39انضم إلى مجتمعنا على Discord وأخبرني برأيك. شكراً لكم.