هل واجهت هذا الموقف من قبل؟ بينما تفعل وتطور ميزة جديدة معقدة، يظهر فجأة خطأ (Bug) عاجل يتطلب الإصلاح الفوري.
من أجل التبديل بين الفروع، تضطر مكرهاً إلى تشغيل git stash لإخفاء الكود غير المكتمل. وبعد إصلاح الخطأ والعودة، عليك تشغيل git stash pop بحذر شديد، حيث تواجه أحياناً كابوس تضارب الكود (Conflict).
في الواقع، يمتلك Git منذ فترة طويلة أداة قوية جداً لحل هذه المشكلة، ألا وهي Git Worktree.
ودّع التبديل الفوضوي بين الفروع والـ Stash، وافتح آفاق التطوير متعدد المسارات باستخدام Worktree
يأخذك هذا المقال في جولة لفهم آلية عمله الأساسية واستخداماته العملية.
ما الفرق بين Git Worktree و Git Branch؟
لفهم Git Worktree، دعنا نوضح أولاً الفرق بينه وبين Git Branch.
يمكننا تشبيه التحكم في الإصدارات بقراءة كتاب ورقي:
Commitهو إصدار / طبعة الكتابBranchهو فاصل الصفحات الموضوع عند صفحة معينةWorktreeهو مكتب العمل الذي تفتح عليه الكتاب
في الطريقة التقليدية، لدينا مكتب عمل واحد فقط. في كل مرة نريد فيها تغيير فاصل الصفحات، يجب علينا جمع جميع الأوراق قيد التعديل على الطاولة أو إخفاؤها في الدرج (وهو ما يمثله git stash).
بينما يتيح لك Git Worktree امتلاك عدة مكاتب عمل مستقلة في نفس الوقت.
| عنصر المقارنة | Git Branch | Git Worktree |
|---|---|---|
| مفهوم Workspace | يتشارك دليل عمل فعلي واحد | يمتلك مكاتب وأدلة عمل فعلية متعددة ومستقلة |
| تكلفة تبديل الفرع | يتطلب commit أو stash أو حفظ التغييرات | بدون stash، فقط انتقل إلى دليل آخر |
| العزل والأمان | الملفات غير الحافظة قد تسبب تضارباً أو بقايا | أدلة معزولة تماماً، لا تتداخل التغييرات مع بعضها |
| سجل النشاط | يتشارك سجل Git Commit والفروع | يتشارك سجل Git Commit والفروع |
الفرع الحالي ومنطقة التجهيز (Staging Area) والتعديلات غير المحفوظة في كل Worktree مستقلة تماماً، لكنها تتشارك جميع سجلات Commit والفروع.
Branch هو فاصل صفحات الإصدار، بينما Worktree هو مكتب العمل الفعلي
بهذه الطريقة، عندما تحتاج إلى التبديل بين المهام، ما عليك سوى فتح مجلد دليل آخر دون الحاجة إلى تغيير حالة التطوير الحالية على الإطلاق.
كيف تبدأ في استخدام Git Worktree؟
عند تطبيق Git Worktree في المشاريع الفعلية، فإن التخطيط الجيد للمجلدات يجعل التطوير أكثر سلاسة.
يُوصى بالحفاظ على دليل المشروع الأصلي الذي تم تنزيله عبر git clone كمقر رئيسي نظيف main، ووضع أدلة Worktree الجديدة خارج المشروع الرئيسي (مثل ../my-app-worktrees)، وذلك لتجنب أخطاء الفحص التكراري لوسائل التطوير.
تسلسل الأوامر الشائعة هو كالتالي:
| التسلسل | الأمر |
|---|---|
| 1. إنشاء Worktree جديد وإنشاء فرع جديد في نفس الوقت | git worktree add ../my-app-worktrees/feature-login -b feature-login |
| 2. عرض قائمة جميع الـ Worktree الحالية | git worktree list |
يُعتبر Git Worktree مناسباً جداً لإدارة مهام التطوير الخاصة بـ AI Agent.
يمكنك إعطاء AI Agent دليل Worktree مستقل ليقوم بالتعديل والاختبار بحرية، بينما يمكن للمطور البشري إجراء مراجعة الكود (Review) والاختبار في Worktree آخر.
امنح AI Agent دليل Worktree مستقلاً لتشغيل تطوير الذكاء الاصطناعي والمراجعة البشرية بالتوازي
يعمل كلاهما في دليل فعلي خاص به، مما يضمن الأمان والوضوح.
كيف تقوم بالدمج والتنظيف الآمن بعد الانتهاء من التطوير؟
بعد إكمال التطوير في Worktree مستقل، كيف تقوم بدمج النتائج والتنظيف؟
تذكر مفهوماً مهماً: دليل Worktree نفسه لا يحتاج إلى الدمج، ما يحتاج إلى الدمج فعلياً هو Branch.
تحتاج فقط إلى العودة إلى دليل مكتب العمل main وتشغيل git merge على فرع الميزة المقابل لإكمال الدمج.
بالنسبة للتنظيف، يرجى اتباع العملية القياسية المكونة من خطوتين:
| الخطوة | الأمر |
|---|---|
| 1. إزالة دليل Worktree الفعلي | git worktree remove ../my-app-worktrees/feature-login |
| 2. حذف فرع الميزة المكتمل | git branch -d feature-login |
قم بإزالة دليل Worktree أولاً، ثم احذف الـ Branch
يرجى التأكد من استخدام الأمر git worktree remove للتنظيف، بدلاً من حذف المجلد يدوياً من مستكشف الملفات.
ما هي الفخاخ الشائعة عند استخدام Git Worktree؟
على الرغم من أن Git Worktree مريح للغاية، إلا أن هناك بعض النقاط التي تتطلب انتباهاً خاصاً.
الفخ 1: فقدان التغييرات غير المحفوظة (Commit)
على الرغم من أن حذف Worktree لا يحذف الفرع نفسه، إلا أنه إذا كانت لديك تغييرات لم تقم بـ commit لها في ذلك الدليل، فإن الحذف الإجباري لدليل Worktree سيؤدي إلى فقدان تلك التغييرات نهائياً.
الفخ 2: تضارب انشغال الفرع
آلية الحماية في Git لا تسمح بعمل Checkout لنفس الـ Branch في مقري Worktree مختلفين في نفس الوقت. إذا حاولت التبديل إلى فرع مستخدم بالفعل في Worktree ثاني، فسيقوم Git بمنعك وإظهار رسالة خطأ.
الحذف الإجباري لـ Worktree يؤدي إلى فقدان التغييرات التي لم يتم حفظها عبر Commit
طالما أنك تتقن هذه الخصائص والمبادئ، يمكنك تجنب الوقوع في الخطأ.
الخلاصة
من خلال Git Worktree، يمكننا التوديع التام لسير العمل الفوضوي للتبديل بين الفروع و git stash، وتحقيق تطوير حقيقي متعدد المسارات.
في المرة القادمة التي تواجه فيها إصلاح خطأ عاجل، أو تطور ميزات متعددة في وقت واحد، أو تسند مهام البرمجة لـ AI Agent، جرب فتح مكتب عمل جديد!