أشجار العمل في Claude Code (worktrees): جلسات متوازية بلا تعارضات
أمر واحد يمنح كل جلسة Claude Code نسخة كاملة من مستودعك. تعلّم claude --worktree وبنية .claude/worktrees وعزل الوكلاء الفرعيين في worktrees والتنظيف عند الخروج — وأين يظل git worktree add اليدوي متفوقًا.
TL;DR
- يبدأ الأمر claude --worktree (الصيغة القصيرة -w) جلستك داخل نسخة جديدة من المستودع في .claude/worktrees/<name>، مسحوبة على فرع اسمه worktree-<name>.
- أطلق جلسات إضافية في طرفيات أخرى للعمل بالتوازي — كل جلسة تعدّل مجلدها الخاص مع مشاركة تاريخ Git نفسه والremote نفسه.
- الوكلاء الفرعيون ينالون worktrees أيضًا: اطلب ذلك بلغة طبيعية، أو اجعل isolation: worktree في frontmatter ملف .claude/agents/*.md لجعلها دائمة.
- عند الخروج، تُحذف worktrees غير المسماة النظيفة تلقائيًا ويُسأل العمل الجاري عن إبقائه أو حذفه؛ وادمج النتائج بـgit merge عادي للفرع worktree-<name>.
Claude Code Worktrees in 7 Minutes
القناة: Developers Digest7:10
I'm using claude --worktree for everything now
القناة: Matt Pocock7:57
Worktrees — official documentation
الوثائق الرسمية: code.claude.com/docs
كل خيار وكل مسار وكل سلوك تنظيف في هذه الصفحة مدقّق مقابل وثائق worktrees الرسمية؛ والفيديوهات أعلاه هي المصدر البصري والمعرفي، بما في ذلك سؤال الإبقاء/الحذف عند الخروج وفخ الدفع إلى main.
تُنسب لقطات الشاشة إلى صانعيها بروابط مباشرة إلى الطوابع الزمنية الدقيقة. لا تُستخدم لقطات للوجوه.
استخدام worktrees في Claude Code خطوة بخطوة
الجزء 1 — جلستك المعزولة الأولى
- 1
تحضير مستودع Git فيه commit واحد على الأقل
أشجار العمل تتفرع من تاريخ قائم، لذا تحتاج ميزة worktree إلى مستودع Git حقيقي. في مجلد جديد شغّل git init وأنشئ ملفًا (العرض التوضيحي يشغّل touch index.html فحسب) واعمل commit. تخطَّ ذلك وليس لدى Claude Code ما يتفرع منه.

git init مع touch index.html — commit واحد هو كل ما تحتاجه ميزة worktree قبل أن يعمل claude --worktree.شاهد عند 1:06 - 2
اعرف ما هو الـworktree فعلًا
git worktree هو مجلد عمل ثانٍ بملفاته وفرعه المسحوب الخاصين، يشارك تاريخ المستودع وremote الخاص به. وعلى خلاف تبديل الفروع، لا شيء يُخزَّن جانبًا: السحب الرئيسي وكل worktree قابلان للاستخدام في آن واحد — وهذا بالضبط ما يحتاجه الوكلاء المتوازون.

مستودع واحد ومجلدات عمل كثيرة: ../main و../feature1 و../feature2 كل منها على فرعه في الوقت نفسه.شاهد عند 0:30 - 3
أطلق Claude Code مع --worktree
من داخل المستودع شغّل claude --worktree (أو الصيغة القصيرة claude -w). ينشئ Claude Code المجلد .claude/worktrees/<name> ويولّد اسمًا مثل bright-tumbling-rabbit إذا لم تمرر واحدًا، ويدخل الجلسة في تلك النسخة مباشرة. في تطبيق سطح المكتب تختار خيار worktree عند بدء الجلسة بدلًا من ذلك.

لافتة الترحيب تُظهر أن مجلد عمل الجلسة داخل .claude/worktrees بالفعل — كل ما يأتي يجري في النسخة.شاهد عند 1:22 - 4
افتح جلسة ثانية لمهمتك الثانية
شغّل claude --worktree مجددًا في طرفية أخرى. بلا اسم ستحصل على worktree مستقل آخر؛ ومرر الاسم نفسه مرتين لإعادة فتح الاسم نفسه. يمكن الآن لوكيلين تعديل المشروع ذاته في آن واحد لأن كلًّا منهما يرى مجلده وحده.
الجزء 2 — أين تسكن ملفاتك وأوامرك
- 5
افحص النسخة الكاملة تحت .claude/worktrees
افتح المجلد في مدير ملفاتك: كل worktree نسخة سحب كاملة بملف index.html خاص وبملف .claude/settings.local.json خاص وملف git خاص، بينما تبقى قاعدة الكائنات الثقيلة مشتركة في .git الرئيسي. لهذا فإن إنشاء نسخة إضافية يكاد يكون مجانيًا.

worktrees على القرص — clever-munching-toast وspicy-napping-otter — كلٌّ نسخة مشروع كاملة بمجلد git وindex.html خاصين.شاهد عند 1:50 - 6
تأكد أن الأوامر تبقى داخل الـworktree
عندما تفتح الجلسة الأولى صفحتها في المتصفح، يُظهر تنبيه الأذونات أن المسار يشير إلى .claude/worktrees/clever-munching-toast — لا إلى سحبك الرئيسي. كما يمنع Claude Code الوكلاء الفرعيين من تعديل السحب الرئيسي مباشرة، وإحدى فحوص العزل هذه لا يمكن إطفاؤها.

حوار الموافقة يذكر مسار الـworktree بالضبط، دليلًا على أن الجلسة الأولى لا تلمس سوى نسختها الخاصة من المشروع.شاهد عند 1:42 - 7
سمِّ الـworktrees أو تفرّع من PR (اختياري)
ينشئ الأمر claude --worktree feature-auth عنصر worktree باسم متوقَّع، وإعادة الاسم نفسه تعيد فتحه بدل إنشاء مكرر. يمكنك أيضًا تمرير رقم PR بين علامتي تنصيص (claude --worktree "#1234") أو رابط PR على GitHub/GitLab للحصول على worktree لطلب السحب ذاك تحت .claude/worktrees/pr-<number>.
الجزء 3 — وكلاء فرعيون متوازيون والتنظيف
- 8
اطلب وكلاء فرعيين متوازيين بعزل worktree
العزل يتجاوز الطرفيات. مطالبة واحدة — "أطلق خمسة وكلاء فرعيين مختلفين لإنشاء خمس نسخ، واستفد من عزل git worktree" — تجعل Claude Code يطلق وكلاء Task، كلٌّ في worktree معزول خاص، يعملون على المستودع نفسه في آن واحد بلا تصادمات.

خمسة وكلاء Task يُطلقون بالتوازي، كلٌّ معلَن بأنه يعمل في git worktree معزول خاص.شاهد عند 2:42 - 9
راقب كل وكيل وهو يجري في مساره الخاص
تعرض قائمة المهام النسخ الخمس مع استخدامات الأدوات وعدادات التوكنات، فترى التقدم دون فتح خمس طرفيات. وتبقى نصوص الوكلاء الفرعيين خارج سياق الخيط الرئيسي، ما يُبقي جلسة التنسيق صغيرة بينما يتحمل الوكلاء العمل الثقيل.

الوكلاء الفرعيون الخمسة في منتصف التشغيل — النسخة 1 انتهت بالفعل عند 50.3 ألف توكن بينما يقرأ الآخرون ملفات في worktrees الخاصة بهم.شاهد عند 3:42 - 10
قارن النسخ ثم ادمج الفائزة
عند انتهاء الوكلاء، يسرد Claude Code كل نسخة مع مسارها تحت .claude/worktrees/agent-<id>/، فتفتحها جنبًا إلى جنب في المتصفح. انشر ما يعجبك بـgit merge عادي لفرع الـworktree (أو عبر PR) — والتعارضات إن وُجدت تُحل كأي دمج Git آخر.

يلخّص كل نسخة ومسارها في .claude/worktrees، مع نتيجة معروضة مفتوحة بجوار القائمة.شاهد عند 4:22 - 11
احفظ العزل كوكيل فرعي قابل لإعادة الاستخدام
لجعل عزل worktree دائمًا، اطلب ذلك فحسب: "أنشئ وكيلًا فرعيًا لمطوّر واجهات أمامية، واستخدم نموذج Haiku، واجعله يستفيد من عزل worktree". يبحث Claude Code في وثائق وكلائه الخاصة ويكتب لك ملفًا جديدًا تحت .claude/agents/.

اللغة الطبيعية كافية — يفحص Claude Code وثائقه الخاصة لصيغة الوكلاء المخصصة قبل كتابة الملف.شاهد عند 5:42 - 12
افحص سطر isolation: worktree في الـfrontmatter
يحمل الملف frontend-dev.md المولَّد name وdescription وmodel: haiku وقائمة أدوات مسموحة و— السطر الجديد — isolation: worktree. كل تشغيل لاحق لهذا الوكيل الفرعي يجري الآن في worktree مؤقت يُحذف تلقائيًا إذا انتهى دون تغييرات.

السطر 8 من الـfrontmatter — isolation: worktree — هو ما يمنح كل تشغيل لهذا الوكيل الفرعي worktree الخاص به.شاهد عند 6:42 - 13
ادمج ثم اترك Claude ينسّق
عند إنهائك جلسة، يفحص Claude Code الـworktree: تُحذف تلقائيًا worktrees غير المسماة النظيفة، وكل ما فيه عمل يطلب الإبقاء أو الحذف — والإبقاء يطبع الأمر claude --worktree <name> --resume لوقت لاحق. وتشغيلات -p بلا واجهة لا تنظف أبدًا؛ احذفها بـgit worktree remove.
worktrees في Claude Code مقابل git worktree add اليدوي
أشجار العمل جزء من Git منذ سنوات — الجديد أن Claude Code يدير دورة حياتها كاملة. الاختلافات ذات الأثر:
- 1الإنشاء: يدويًا تشغّل git worktree add ../project-feature -b feature ثم cd إليه ثم تشغّل Claude. مع claude --worktree تدخل الجلسة إلى .claude/worktrees/<name> في خطوة واحدة، بالاسم منك أو تلقائيًا.
- 2Commit الأساس: يتحكم worktree.baseRef في نقطة البداية — fresh (الافتراضي) يتفرع من الفرع الافتراضي للremote، وhead يحمل commits المحلية غير المدفوعة. لا يمكن للخيار استهداف فرع بعينه؛ الوثائق توصي بـgit worktree add اليدوي لذلك.
- 3ملفات التهيئة: ملف .worktreeinclude في جذر المشروع ينسخ الملفات المتجاهَلة في git مثل .env إلى كل worktree جديد. الـworktrees اليدوية لا تنال هذا العلاج.
- 4التنظيف: يفحص Claude Code الـworktree عند الخروج، ويحذف تلقائيًا غير المسماة النظيفة، ويسأل قبل لمس العمل الجاري، ويكنس دوريًا worktrees الوكلاء الفرعيين المهملة. اليدوية مسؤوليتك بالكامل.
- 5حواجز الحماية: فحوص العزل تمنع الوكلاء الفرعيين من تعديل السحب الرئيسي، واستئناف الجلسة يعيدك إلى worktree الخاص بها. لا نظير لذلك في git worktree add العادي.
في العمق، لا يزال Git عاديًا. لوحة التحكم بالمصادر في VS Code تسرد كل worktree مع تغييراته، والدمجات git merge عادية، وتتعايش اليدوية وتلقائية Claude في المستودع نفسه — اختر الأداة حسب المهمة.
حين لا يتصرّف الـworktree كما يجب
معظم العثرات أساسيات Git تتجلى، لا أخطاء في الميزة. هذه الخمس تغطي تقريبًا كل حافة خشنة ستقابلها:
- 1الدفع يهبط على main. فرع worktree الجديد يتتبع الفرع الافتراضي للorigin، لذا قد يستهدف git push المجرّد فرع main. ادفع صراحةً بـgit push origin worktree-<name> وأبقِ main محمية.
- 2ملفات أو أدوات مفقودة. الملفات المتجاهَلة في git (.env ومجلدات vendor) ومرشحات المستودع المحلية مثل LFS لا تنتقل إلى worktree جديد. أدرجها في .worktreeinclude، أو شغّل git lfs pull وأوامر الإعداد داخل الـworktree.
- 3يفشل الإطلاق بخطأ ثقة. في مجلد غير موثوق يخرج claude --worktree بخطأ يطلب قبول مساحة العمل أولًا — وافق وأعد التشغيل. (تشغيلات -p غير التفاعلية تتخطى الفحص.)
- 4worktrees تتصادمان وقت الدمج. إذا عدّلت المهمتان الملف نفسه — مسارات، شريط جانبي، package.json — فستحل التعارضات عند الدمج كأي سير Git. أشجار العمل تزيل التصادمات أثناء التشغيل لا تزاحم النوايا.
- 5worktrees متبقية بعد التشغيلات بلا واجهة. تشغيلات -p لا تنظف أبدًا خلفها؛ احذفها يدويًا بـgit worktree remove (شغّل أولًا git worktree unlock إن كان أحدها مقفولًا).
حذف worktree من تحت جلسة ليس قاتلًا أيضًا: الاستئناف التالي يعود إلى مجلد الإطلاق وتُمحى الرابطة. لا شيء آخر في الجلسة ينكسر.
