مستوى القارئ: مبتدئ
لو بتفتح الـ repo وبتلاقي 380 فرع منهم 70% مهجور من سنة أو سنتين، أنت مش لوحدك. الفرع المهجور (stale branch) بياكل زمن fetch، بيشوّش الـ branch picker في الـ IDE، وممكن يفضل فيه commit حساس متنسي. المقال ده هيوريك ازاي تبني أوتوميشن على GitHub Actions تنظّف الفروع دي بأمان، بدون ما تكسر شغل حد، في 5 دقائق إعداد.
أتمتة تنظيف فروع Git المهجورة بدون كسر شغل أحد
المشكلة باختصار
Git ما عندوش mechanism تلقائي لحذف الفروع لما تخلص شغلها. مع الوقت، كل feature وكل fix وكل تجربة بتسيب وراها فرع مفتوح. على repo اشتغلت عليه عند عميل فيه 412 فرع لفريق 8 مطورين، متوسط عمر الفروع المهجورة كان 287 يوم. النتيجة العملية:
git fetch --pruneبياخد 18 ثانية بدل ثانيتين.- الـ branch picker في VS Code بيلاج لمدة 4 ثوان لما تفتح الـ repo لأول مرة.
- الـ Actions cache على GitHub بيكبر من 2GB لـ 11GB في 3 شهور.
- المطورين الجدد بيسألوا "أنهي فرع هو الـ main بالظبط؟" لما يلاقوا 6 فروع شبه بعض.
المثال البسيط: خزانة الملابس
تخيّل خزانتك في البيت (دي الـ repo)، وكل قطعة هدوم فيها فرع. كل ما تخلص من بلوفر اشتريته السنة اللي فاتت ومش هتلبسه تاني، المفروض تطلعه. لو سيبته، كل ما تفتح الخزانة بتلف عليه، وبتحتاج وقت تلاقي اللي بتدوّر عليه فعلاً. الفروع نفس الكلام بالظبط: الفرع اللي اتعمله merge، أو الـ PR بتاعه اتقفل من 6 شهور، مالوش لازمة في الخزانة.
الأوتوميشن اللي هنبنيها هنا هي "أمين الخزانة": بيمرّ مرة في الأسبوع، يلف على كل قطعة، ويعمل قائمة باللي مش بتلبسه. القرار النهائي في إيدك إنت، بس هو وفّر عليك ساعة بحث وتنقيب.
التعريف الدقيق: متى يصبح الفرع Stale؟
حسب توثيق GitHub، الفرع يُعتبر "stale" لو ما اتعملش عليه commit جديد لفترة محددة، والافتراضي 90 يوم. لكن "stale" مش معناها "آمن للحذف". الحذف الآمن لازم يحقّق 4 شروط في نفس الوقت:
- الفرع مش
main، ولاdevelop، ولا أي فرع محمي (protected branch). - كل commits الفرع موجودة فعلاً على فرع تاني (merged بالكامل).
- مفيش Pull Request مفتوح بياخد منه أو رايح ليه.
- مفيش tag (زي
v2.4.1) بيشير لـ commit موجود حصرياً على الفرع ده.
الشرط رقم 2 هو الأهم. لو فرع اتقفلت الـ PR بتاعته كـ "closed without merge"، فيه فرصة إن فيه شغل لسه. الـ workflow اللي هنبنيه هيحترم الشروط دي كلها.
الخطوات: ابني الـ Workflow
هنبني workflow يشتغل كل يوم اتنين الساعة 7 صباحًا. مش هيحذف حاجة بنفسه. هيعمل قائمة بالفروع المرشحة ويفتح GitHub Issue بالنتيجة لمراجعة بشرية قبل التنفيذ. ده مهم في أول شهر، وبعدين تقدر تخلّيه يحذف تلقائي لو القائمة بقت موثوقة.