كلما أضفت وكيل برمجة ثانياً إلى المستودع نفسه، اقتربت من لحظة مألوفة: وكيل يعدّل ملفاً بينما الآخر يعيد كتابته، وفرع واحد تتراكم عليه التغييرات حتى يصعب عليك معرفة من فعل ماذا. هذه ليست مشكلة ذكاء في النماذج، بل مشكلة مساحة عمل مشتركة. والحل الذي يعود إلى الواجهة هذا الأسبوع قديم في Git نفسه: أمر git worktree، وبجانبه أدوات جديدة مثل Worktrunk تحاول جعله مريحاً لسير عمل الوكلاء المتوازين.

ما المشكلة بالضبط؟

Git Worktrees للوكلاء المتوازين: كيف تشغّل عدة وكلاء برمجة دون أن يدوس أحدهم على عمل الآخر؟ — برمجة وتطوير

عندما يعمل وكيلان في المجلد نفسه، يتشاركان ثلاثة أشياء خطرة: الملفات المعدَّلة، وفهرس Git (staging area)، والفرع الحالي. أي وكيل يبدّل الفرع يغيّر الأرضية تحت قدمي الآخر. وأي أمر git add أو git stash من أحدهما قد يلتقط تعديلات الثاني دون قصد.

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

ما هو git worktree؟

الأمر يسمح لك بإنشاء أكثر من مجلد عمل مرتبط بمستودع واحد. كل مجلد يملك فرعه وفهرسه وملفاته الخاصة، لكنه يشارك قاعدة الكائنات (objects) نفسها، فلا تتضاعف المساحة ولا يتكرر الجلب.

# مجلد عمل جديد لمهمة الوكيل الأول على فرع جديد
git worktree add ../app-agent-auth -b agent/auth

# مجلد ثانٍ للوكيل الثاني
git worktree add ../app-agent-tests -b agent/tests

# عرض كل مجلدات العمل
git worktree list

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

المبدأ العملي: امنح كل وكيل مجلداً وفرعاً خاصين به، ودع الدمج قراراً بشرياً يتم في النهاية، لا أثناء العمل.

أين تدخل أداة Worktrunk؟

الأوامر الخام تعمل جيداً لكنها مطوّلة: تحتاج إلى تسمية المجلدات، وتذكّر مساراتها، وتنظيفها بعد الدمج، ونسخ ملفات البيئة غير المتتبَّعة مثل .env. أداة Worktrunk، وهي واجهة سطر أوامر ظهرت حديثاً لإدارة worktrees، تستهدف هذه الفجوة: إنشاء مجلد وفرع بأمر قصير، والتنقل بينها، وتشغيل خطافات (hooks) عند الإنشاء والإزالة، وتنظيف ما انتهى دمجه.

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

خطوات عملية لسير عمل متوازٍ

1. قسّم المهام على حدود واضحة

أفضل المهام للتوازي هي التي تلمس ملفات مختلفة: وكيل للواجهة، وآخر للاختبارات، وثالث لتوثيق الواجهة البرمجية. المهام التي تعدّل الملف المركزي نفسه ستنتهي بتعارضات دمج مهما عزلتها.

2. جهّز بيئة كل مجلد

كل worktree يحتاج إلى تبعياته. يمكنك إما تثبيتها في كل مجلد، أو استخدام مخزن حزم مشترك مثل pnpm لتقليل التكرار. وتذكّر ملفات الإعداد غير المتتبَّعة: انسخها أو اربطها رمزياً.

3. شغّل الوكلاء كل في مجلده

افتح طرفية لكل مجلد وابدأ الوكيل هناك. تجنّب منحه صلاحية الصعود إلى المجلد الأب، فالعزل الحقيقي يبدأ من حدود الصلاحيات لا من أسماء المجلدات فقط.

4. راجع قبل الدمج

استخدم git diff main...agent/auth لكل فرع، وشغّل الاختبارات داخل مجلده، ثم ادمج الفروع واحداً بعد الآخر وليس دفعة واحدة. أي تعارض سيظهر مبكراً وبحجم صغير.

5. نظّف بعد الانتهاء

git worktree remove ../app-agent-auth
git branch -d agent/auth
git worktree prune

ما الذي لا يحلّه worktree؟

الجانب هل يعزله worktree؟
الملفات والفروع والفهرس نعم
المنافذ (ports) المستخدمة للتطوير لا، يلزم تخصيص منفذ لكل مجلد
قاعدة البيانات المحلية لا، شاركها أو أنشئ نسخة لكل وكيل
الأوامر الخطرة على النظام لا، يلزم صندوق رمل أو حاوية
تعارضات الدمج الدلالية لا، تحتاج مراجعة بشرية

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

أخطاء شائعة

  • إنشاء عدد كبير من الوكلاء فوق طاقة المراجعة: ثلاثة وكلاء تراجع عملهم أفضل من ثمانية تغرق في مراجعتهم.
  • ترك مجلدات قديمة: تتراكم worktrees المنسية وتشغل مساحة وتربك قائمة الفروع.
  • الدمج دون اختبار في المجلد نفسه: نجاح الاختبارات على فرع منفصل لا يضمن نجاحها بعد الدمج.
  • نسيان الأسرار: لا تنسخ ملفات المفاتيح إلى مجلدات لا تحتاجها.

أسئلة شائعة

هل يعمل git worktree مع أي وكيل برمجة؟

نعم، لأنه ميزة في Git نفسه وليس في الوكيل. يكفي أن تشغّل الوكيل داخل مجلد العمل المطلوب.

هل يغني عن الحاويات أو صناديق الرمل؟

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

كم وكيلاً يمكن تشغيله بالتوازي بشكل معقول؟

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

الخلاصة

تشغيل عدة وكلاء في مجلد واحد وصفة لتعارضات يصعب تتبعها. git worktree يمنح كل وكيل مجلداً وفرعاً وفهرساً خاصاً مع مشاركة قاعدة الكائنات، وأدوات مثل Worktrunk تخفف عبء الإدارة اليومية. لكنه يعزل الشيفرة فقط، فلا تنسَ المنافذ وقواعد البيانات والصلاحيات، وأبقِ قرار الدمج بيد إنسان يراجع كل فرع على حدة.