النسخة الحالية من git branch --list
في الغالب تعمل ، لكنها بطيئة ومرهقة. على الرغم من أن هذا يمكن إصلاحه بسهولة في Git نفسها ، إلا أن كل تصحيح يحاول تحسين واجهة المستخدم يتم رفضه بحكم الواقع.
git branch-list
الخارجية هي الحل.
لماذا يعتبر git branch-list
أفضل؟
git branch --list
لنفترض أن لديك فرعًا master
يتتبع فرعًا عن بُعد ، لكنه ليس دائمًا محدثًا (سنستخدم مستودع Linux).
في هذه الحالة ، سيظهر git branch
الرسمي هذا:
* master
هذا لا يوفر الكثير من المعلومات. إذا كنت تستخدم خيار --verbose
، ستحصل على:
* master 9f4ad9e425a1 [behind 16592] Linux 5.12
حسنًا ، لقد تأخرنا بحلول عام 16592 ، لكن وراء ماذا؟ يمكننا تخمين لقب الالتزام ، لكن هذا ليس واضحًا حقًا.
إذا استخدمنا --verbose --verbose
على:
* master 9f4ad9e425a1 [origin/master: behind 16592] Linux 5.12
أخيرًا ، لدينا بعض المعلومات المفيدة ، لكن الأمر استغرق مستويين من الفواصل ، وهناك الكثير من المعلومات غير المفيدة عادة.
git branch-list
لدينا من ناحية أخرى ، مع git branch-list
:
* master origin/master
بوم! على الفور نرى المعلومات الأكثر فائدة: master
Tracks origin/master
.
ثم ، إذا أردنا أن نعرف متى تكون الفروع محدثة ، فإننا نستخدم -t
:
* master origin/master<
هل نحن نهتم حقًا إذا كان لدينا 16592 متخلفًا ، على عكس 14386 يرتكب وراءه؟ لا ، كل ما نهتم به هو أننا ننشر ، وهو ما يمثله <
الرمز. هذه هي نفس المعلومات التي تحصل عليها عند استخدام __git_ps1
مع GIT_PS1_SHOWUPSTREAM=auto
.
إذا كنت تريد المزيد من المعلومات ، يمكنك تحديد خيار -v
:
* master [origin/master<] Linux 5.12
نحصل على جميع المعلومات الأكثر فائدة على جميع المستويات (من يهتم بما هو معرف الكائن؟).
يمكنك الحصول على بعض مزايا git branch-list
من git branch
الرسمي ، أيا كان ، تحتاج إلى معرفة الخيارات التي يجب تمكينها على وجه التحديد.
على سبيل المثال ، دعنا نقول أن لديك العديد من الفروع التي تحديث الوثائق المسبقة مع doc-
. مع git branch
الرسمي ، يمكنك أن تفعل شيئًا مثل:
git branch --list doc-*
هذا يعمل ، ومع ذلك ، 1) لا يعمل ما لم تحدد --list
، و 2) تحتاج إلى إضافة النجمة ( *
).
من ناحية أخرى مع git branch-list
:
git branch-list doc
أنت لا تحتاج إلى أي خيار ، ولا النجمة. إنه يعمل على الفور.
مثال آخر ؛ يمكنك تمكين فرز مفيد للفروع مع التكوين التالي:
[branch]
sort = -committerdate
ولكن مع git branch-list
لا تحتاج إلى ذلك ؛ تم فرزها بشكل افتراضي.
من أجل اختبار الأداء ، سأستخدم مستودعًا حقيقيًا: Linux. أقوم بإنشاء 100 فرع في نقاط عشوائية تمامًا على مدى السنوات العشر الماضية.
بعد الاحماء ذاكرة التخزين المؤقت:
git branch --list --verbose
21.804 seconds
21.614 seconds
21.415 seconds
git branch-list
0.104 seconds
0.107 seconds
0.107 seconds
هل هناك حتى سؤال؟
git branch-list
هي نفس git branch --list
... ولكن أفضل بكثير.
انسخ البرنامج النصي في أي مكان في $PATH
الخاص بك وجعله قابل للتنفيذ ، أو قم make install
والذي سيقوم بتثبيته افتراضيًا على الدليل ~/bin/
(تأكد من أنه في $PATH
الخاص بك).