تعرف دائمًا على فرع Git الذي تتواجد فيه باستخدام هذه الخدعة في Linux

النقاط الرئيسية

  • يعد العمل مع الفروع في Git سريعًا وسهلاً، ونحن نشجع على القيام بذلك بشكل متكرر كممارسة عمل جيدة.
  • نظرًا لأن هذه العملية بسيطة جدًا، فإن تغيير الفرع لا يعلق دائمًا في ذهنك.
  • قم بتعديل موجه الأوامر الخاص بك لإظهار فرع Git الحالي تلقائيًا، وستعرف دائمًا الفرع الذي تتواجد فيه.



إن استخدام الفروع في Git أمر سهل للغاية، فنحن نفعل ذلك كثيرًا. لدرجة أن تتبع فرعك الحالي ليس بالأمر السهل. باستخدام هذه الحيلة، لن تنسى فرعك الحالي أبدًا.


تتبع فروع Git

الفروع مهمة للغاية في التحكم في الإصدارات. فهي تتيح لك العمل على ميزات جديدة أو تغييرات على الكود الحالي، دون التأثير على فرع الكود المصدر الرئيسي.

إن العمل مع الفروع في Git أمر سهل للغاية مقارنة ببرامج التحكم في الإصدارات الأخرى. إن إنشاء فروع جديدة وتغيير الفروع هي عمليات خفيفة للغاية، لذا فهي تتم في لمح البصر. ولأنها سريعة وسهلة للغاية، يميل المطورون إلى القيام بذلك كثيرًا.

إن الأمر سهل للغاية. نظرًا لأن Git يجعل تغيير الفروع أمرًا تافهًا، فيمكنك القيام بذلك دون وعي تقريبًا كما قد تقوم بتغيير الدلائل. لكن معرفة الفرع الذي أنت فيه أمر مهم للغاية.


تساعدك هذه الحيلة من خلال عرض فرع Git الحالي في موجه أوامر Bash. والجزء الرائع هو أنه إذا كان الدليل الحالي لا يحتوي على مستودع Git، فسترى موجه الأوامر المعتاد.

الحصول على فرع Git الخاص بك كسلسلة

لكي ينجح هذا، نحتاج إلى أن نتمكن من الحصول على فرع Git الحالي كسلسلة نصية نقوم بإدخالها في موجه الأوامر. فلنصدر أمر Git القياسي لإدراج الفروع في المستودع.

git branch 
استخدام الأمر git branch لإدراج الفروع في المستودع الحالي، مع وضع علامة النجمة على الفرع الحالي.

تسرد هذه القائمة جميع الفروع الموجودة في المستودع. الفرع الحالي، saved-game، مُشار إليه بعلامة النجمة. ومن الملائم أن يكون هذا هو السطر الوحيد الذي يحتوي على علامة النجمة. وهذا يعني أنه يمكننا توجيه الناتج من أمر git إلى sed، واستخدام ميزات معالجة التدفق الخاصة بأمر sed لإزالة الأسطر التي لا تحتوي على علامة النجمة. بالنسبة للسطر الوحيد المتبقي، يمكننا استخدام sed لإزالة علامة النجمة والمسافة.


git branch | sed -e '/^(^*)/d' -e 's/* \(.*\)/\1/' 
نقل مخرجات أمر git branch إلى sed لعزل اسم الفرع الحالي.

يمنحنا هذا اسم الفرع الحالي. هناك طرق أبسط للقيام بذلك، ولكن من أجل استكمال الأمر، إليك كيفية عمل هذا الأمر.

نقوم بإصدار أمر git branch القياسي.

git branch 

يتم توجيه الإخراج إلى sed. هناك تعبيران sed. يحذف التعبير الأول الأسطر التي لا تحتوي على علامة النجمة.

-e '/^(^*)/d' 

يؤدي التعبير الثاني إلى إزالة علامة النجمة والمسافة الرئيسية من السطر المتبقي.

-e 's/* \(.*\)/\1/' 

إنه يعمل، ولكن ليس الجميع على دراية أو راحة باستخدام sed. عندما تنظر إلى هذا بعد ستة أشهر، هل من المرجح أن يكون له أي معنى؟ يمكننا الاستفادة من git وBash لتصميم طريقة أبسط.


يتيح لنا عامل Bash && ربط الأوامر معًا بحيث يتم تنفيذها واحدة تلو الأخرى. لتنفيذ أمر في السلسلة، يجب أن يكتمل الأمر السابق بنجاح. وكما سنرى، يمكننا الاستفادة من هذا.

هناك أمر آخر يعمل لصالحنا، وهو أنه منذ الإصدار 2.2، أصبح الأمر git branch يحتوي على خيار يسمى –show-current. يعرض هذا الخيار اسم الفرع الحالي بمفرده.

git branch  
استخدام الخيار --show-current مع الأمر git branch للحصول على اسم الفرع الحالي.

هذه طريقة أسهل للحصول على الاسم غير المزخرف لفرع Git الحالي. المشكلة الوحيدة هي أنها تولد رسالة خطأ إذا كان الدليل الحالي لا يحتوي على مستودع Git. لذا نحتاج إلى التأكد من عدم تنفيذ الأمر إذا لم نكن في مستودع Git.


يوجد أمر git يسمى git status. يقوم هذا الأمر بالإبلاغ عن حالة مستودع Git. إذا فشل الأمر، كما يحدث إذا لم يكن هناك مستودع للإبلاغ عنه، فإن قيمة الخروج الخاصة به هي 128.

git status
echo $?
تشغيل أمر git status خارج المستودع، لرؤية قيمة رمز الخروج عند الفشل.

في دليل يحتوي على مستودع، قيمة خروجه هي صفر.

git status
echo $?
تشغيل أمر git status داخل المستودع لرؤية قيمة رمز الخروج الناجح.

يمكننا ربط هذا الأمر بأمر git branch الخاص بنا، بحيث يتم تنفيذ أمر git branch فقط إذا أعاد أمر git status القيمة صفرًا. والشيء الآخر الذي سنفعله هو إعادة توجيه كل مخرجات الشاشة من أمر git status إلى /dev/null، وهو ملف وهمي يستهلك كل ما يتم إرساله إليه بصمت.


git status &> /dev/null && echo " $(git branch --show-current)"
cd taf
git status &> /dev/null && echo " $(git branch --show-current)"
تشغيل أمرين متسلسلين من Git خارج وداخل دليل يحتوي على مستودع، للتأكد من أننا نحصل فقط على إخراج الشاشة في حالة النجاح.

لقد قمنا بإخفاء كل النتائج من أمر git status، وهو ما نحتاجه على وجه التحديد. داخل الدليل الذي لا يحتوي على مستودع، لا يوجد نتائج شاشة. داخل الدليل الذي يحتوي على مستودع، نرى اسم الفرع الحالي.

يمكننا ببساطة أن نسمح لأمر git branch بكتابة اسم الفرع الحالي في نافذة المحطة الطرفية كما هو، ولكن من خلال تغليفه بأمر echo، يمكننا تضمين مسافة بادئة. ستفصل المسافة اسم الفرع عن اسم الدليل في موجه الأوامر، مما يجعل رؤيته أسهل في لمحة.


إضافة السلسلة إلى موجه Bash الخاص بك

لقد حصلنا على اسم فرع Git الحالي، ولدينا طريقة لإخراج ذلك إلى الشاشة، بتنسيق مسافة بادئة. الآن سنقوم بدمج ذلك في موجه الأوامر.

سننشئ دالة لاحتواء الأوامر التي أنشأناها حتى الآن، وسنستدعي هذه الدالة من داخل تعريف موجه الأوامر. وفي كل مرة يتم فيها عرض موجه الأوامر، سيتم استدعاء الدالة.

في Bash، يكون تعريف موجه الأوامر عادةً (ولكن ليس دائمًا) في ملف .bashrc. وهو ملف نظام مخفي، يقع في الدليل الرئيسي لديك.

استخدم محرر النصوص المفضل لديك لتحرير ملف .bashrc.

ملف .bashrc في محرر، مع تمييز تعريف موجه الأوامر.

ابحث عن السطر الذي يحدد موجه الأوامر الخاص بك. يبدأ عادةً بـ:

PS1= 

على جهاز الكمبيوتر Ubuntu هذا، السطر الذي نريده هو:


PS1='${debian_chroot:+($debian_chroot)}\(\033(01;32m\)\u@\h\(\033(00m\):\(\033(01;34m\)\w\(\033(00m\)\$ ' 

يوجد سطر آخر “PS1=” أسفل هذا السطر، ولكنه أقصر كثيرًا. إذا قرأت ما يحدث في كتلة if-then، فستجد أن أحد المطالبات مخصص للعروض الملونة والآخر للعروض أحادية اللون. إذا كنت تستخدم Git، فأنت مبرمج. ستتمكن قريبًا من تحديد المطالب الذي تحتاج إلى العمل معه.

سنضيف دالتنا فوق كتلة if-then. سأسميها get_git_branch.

تمت إضافة الدالة get_git_branch إلى ملف .bashrc.

يحتوي على نفس الأوامر التي استخدمناها في سطر الأوامر. نحتاج الآن إلى تحديد المكان الذي سنستدعي منه الوظيفة، في تعريف موجه الأوامر.

هذه هي نهاية من التعريف الفوري.


\w\(\033(00m\)\$ ' 

هكذا تم صنعه.

\w 

هذا رمز يتم استبداله بدليل العمل عند عرض موجه الأوامر.

\(\033(00m\) 

هذا هو رمز لون ASCII. وهو يعيد لون النص إلى اللون الأبيض، بحيث يتم عرض علامة الدولار ‘$’ في موجه الأوامر بنص أبيض.

\$ ' 

يؤدي هذا إلى عرض علامة الدولار، ومسافة، ثم إغلاق تعريف موجه الأوامر بعلامة اقتباس واحدة.

سنستدعي وظيفتنا فورًا بعد الرمز “\w”. وسنقوم أيضًا بإدراج رمز لوني لعرض فرع Git الحالي باللون الأصفر، لجعله بارزًا. هذا هو النص الذي سندرجه.

\(\033(01;33m\)$(get_git_branch) 

لاحظ أنه لا توجد مسافات في النص الذي قمنا بإدراجه. هذا هو شكل موجه الأوامر بالكامل بعد الإضافات التي قمنا بها.

PS1='${debian_chroot:+($debian_chroot)}\(\033(01;32m\)\u@\h\(\033(00m\):\(\033(01;34m\)\w\(\033(01;33m\)$(get_git_branch)\(\033(00m\)\$ ' 
تم إدراج رمز اللون ASCII واستدعاء الوظيفة في تعريف موجه الأوامر.


احفظ التغييرات وأغلق المحرر. أغلق نوافذ المحطة الطرفية وافتح نافذة محطة طرفية جديدة. سترى موجه أوامر عاديًا. انتقل إلى الدليل الذي يحتوي على مستودع Git.

pwd
cd taf
التحقق من موجه الأوامر خارج وداخل مستودع Git.

يتم عرض اسم فرع Git الحالي باللون الأصفر. إذا قمت بفحص فرع مختلف، يتغير موجه الأوامر الخاص بك على الفور.

git checkout timed-events 
التحقق من فرع Git للتأكد من أن موجه الأوامر يعكس الفرع الحالي الجديد.

ليس فقط لـ Git

بإمكانك استخدام هذه الطريقة لعرض أي نوع من المعلومات التي يمكنك جمعها باستخدام أدوات سطر الأوامر.


على سبيل المثال، إذا قمت بإنشاء هذه الوظيفة واستدعائها من موجه الأوامر لديك بدلاً من استدعاء get_git_branch، فستشاهد الوقت في موجه الأوامر لديك.

get_time() {
  echo " $(date +%r)"
}
الوقت المضمن في موجه الأوامر.

أضف تعليق