أنت في منتصف تطوير ميزة جديدة عندما يدخل المدير فجأة ومعه خطأ عاجل يجب إصلاحه. ماذا تفعل؟
ربما سيستخدم معظم الناس git stash لرمي الكود المكتوب جزئيًا في درج، ثم يبدلون الفروع لإصلاح الخطأ.
ولكن ماذا لو كانت تغييراتك تتضمن تكوينات بيئة هائلة، أو إذا كان تبديل الفروع يتسبب في تلوث متبادل بين node_modules و Build Artifacts (القطع الفنية للبناء)؟ هذا كافٍ لجعلك ترغب في تحطيم لوحة المفاتيح.
هنا يأتي دور Git Worktree للإنقاذ!
ما هو Git Worktree؟
يمكنك التفكير في عملية Git مثل “تجديد منزل”.
مع git branch التقليدي، عندما تقوم بتبديل الفروع، يختفي كل الأثاث في الغرفة على الفور أمام عينيك، ويُعاد ترتيبه تلقائيًا ليناسب مهمة أخرى.
على الرغم من أنه يوفر المساحة، إلا أن الجانب السلبي هو “التلوث البيئي”. عليك أن تضع أطباقك المتسخة في الخزانة قبل أن تتمكن من التبديل؛ وبعد التبديل، قد تظل رائحة الشحوم من البناء السابق عالقة في الهواء.
من ناحية أخرى، فإن Git Worktree يشبه بناء منزل متطابق مباشرة في قطعة الأرض الفارغة المجاورة.
ببساطة، المبدأ الأساسي لـ Git هو:
“روح واحدة (قاعدة بيانات .git)، أجساد متعددة (أدلة العمل).”
يمكنك أن تمتلك في نفس الوقت “فرع تطوير الميزات” و “فرع الإصلاح في حالات الطوارئ”. تكتب يدك اليسرى منطق الذكاء الاصطناعي في النافذة أ، بينما تقوم يدك اليمنى بإصلاح الأخطاء في النافذة ب، ولا يتدخل أي من الجانبين مع الآخر. هذا هو التطوير الموازي الحقيقي.
الدليل العملي لـ Worktree
للحفاظ على حالة التدفق لديك أثناء التطوير، تعد بنية الدليل وتكوين البيئة مفتاحًا.
1. الإدارة المتوازية للدليل: لا تبنِ فروعًا داخل المقر الرئيسي
العديد من الأشخاص الذين يستخدمون Worktree لأول مرة ينشئون بخرق الدليل الجديد داخل مجلد المشروع الأصلي. لا تفعل هذا أبدًا! سيرمي Git في فوضى متكررة لا نهائية. الطريقة الصحيحة لبناء Git Worktree هي:
ضع المقر الرئيسي (main) وفرع المهمة (feature) بشكل موازٍ لبعضهما البعض.
# قم بتنفيذ إنشاء Worktree من المقر الرئيسي، ولكن ضع دليل Worktree خارج دليل المشروع الأصلي
git worktree add ../my-app-feat-ai dev-branch
يجب أن تبدو بنية الدليل الخاصة بك كما يلي:
- my-project/ # غلاف ضخم
- main-repo/ # المقر الرئيسي المستقر
- feat-ai-search/ # فرع جديد قيد الإنشاء
2. عزل تكوين البيئة: أعطِ كل فرع روحه الخاصة
نظرًا لأن أدلة المشروع منفصلة، فيمكن فصل ملفات تكوين .env الخاصة بك أيضًا.
يمكنك الاتصال بقاعدة بيانات اختبار في feat-ai-search، مع الاحتفاظ بقاعدة بيانات التطوير الأصلية في main. بهذه الطريقة، عندما تبدل النوافذ، لا تضطر حتى إلى تغيير تفاصيل الاتصال.
بعد دخول دليل Worktree، فإنك تستخدم متغيرات البيئة الخاصة بدليل Worktree هذا مباشرة للتطوير، بدون الحاجة إلى القيام بأي تبديل أو إعادة بناء للبيئة. هذا الشعور بـ “الدخول والبدء في العمل فورًا” مدهش حقًا.
سير عمل دمج (Merge) الـ Worktree
بعد الانتهاء من التطوير داخل Worktree، يكون سير العمل في الواقع متطابقًا مع فرع تقليدي، مع إجراء “هدم” إضافي واحد فقط.
| خطوات سير العمل | الوصف |
|---|---|
| 1. Commit & Push في الفرع | يجب أن تذهب فعليًا إلى الفرع للمصادقة. |
| 2. تفتيش المقر الرئيسي (Merge) | يمكنك العودة إلى main للدمج، أو فتح Pull Request (PR) مباشرة. |
| 3. الهدم الأنيق (Remove) | بمجرد اكتمال المهمة، لا تحذف المجلد مباشرة؛ استخدم أمر Git لهدمه: git worktree remove ../feat-ai-search |
بوم! تم هدم كوخ Worktree المؤقت، وتم استعادة مساحة القرص، ولا يزال مقرك الرئيسي نظيفًا ولامعًا.
دليل تجنب مخاطر Worktree
على الرغم من أن Worktree مفيد للغاية، إلا أنه لا يزال هناك عدد قليل من المزالق التي يجب الانتباه إليها:
| العنصر | الوصف |
|---|---|
| لا تنقل المقر الرئيسي بشكل عشوائي | لأن Worktree يسجل المسارات المطلقة. إذا قمت بإعادة تسمية دليل المقر الرئيسي، سيهلك فرع Worktree لأنه لن يتمكن من العثور على “روحه”. |
| لا لـ التشعب المزدوج | لا يمكن تسجيل الخروج (checked out) لنفس الفرع في وقت واحد في جهازي Worktrees. |
الروبوت المكنسة prune |
إذا حذفت المجلد بحماقة باستخدام rm -rf، فتذكر تشغيل git worktree prune لمسح أي سجلات متبقية في .git. |
الاستنتاج: هل يجب أن أتوقف عن استخدام Git Branch؟
تستدعي السيناريوهات المختلفة طرق تطوير مختلفة. لا يتعلق الأمر باستبدال أحدهما بالآخر، بل يتعلق بأيهما أكثر ملاءمة.
| السيناريو | الوصف |
|---|---|
| التعديلات اليومية الطفيفة | استمر في استخدام branch؛ إنه خفيف وسريع. |
| المهام واسعة النطاق | على سبيل المثال، إعادة الهيكلة الضخمة، أو التعديلات التي تشمل العديد من متغيرات البيئة، أو المهام التي تتطلب تعاونًا طويل الأمد مع الذكاء الاصطناعي، فإن فتح Worktree هو بالتأكيد الخيار الأفضل. |
إن Git Worktree هو أكثر من مجرد أمر؛ إنه أداة قوية تساعدنا في الحفاظ على سير تطورنا. في المرة القادمة التي تواجه فيها مهمة مرهقة ومتسعة، حاول فتح “فرع Git Worktree” معزول واختبر عملية تطوير سلسة لم يسبق لها مثيل!