المستوى الجاي · فصل ١٥

Git worktrees

git worktree · parallel features · one branch per agent
🎯 الهدف: تشغّل كذا Claude في نفس الوقت، كل واحد على feature، من غير ما يبوّظوا شغل بعض.

الـ subagents في فصل ١٣ كانوا بيدوّروا ويقروا بس. طب لو عايز اتنين Claude يكتبوا كود في نفس الوقت؟ واحد يبني الـ admin، والتاني يبني الـ wishlist؟

لو الاتنين شغالين في نفس الفولدر، هيعدّلوا نفس الملفات ويبوّظوا شغل بعض. واحد يغيّر schema.ts والتاني يكتب فوقه، أو واحد يعمل git checkout لـ branch تاني والتاني شغال.

الـ worktree فولدر تاني على نفس الـ repo، وعليه branch لوحده. كل Claude بيشتغل في فولدر، فمحدش بيلمس ملفات التاني.

الفرق بين subagent و worktree

Subagent

بيفصل الـ context. شغال على نفس الملفات، وغالبًا بيقرا وبس ويرجعلك بخلاصة.

Worktree

بيفصل الملفات والـ branch. كل agent بيكتب كود في نسخة لوحده، وفي الآخر بتعمل merge.

إزاي تعمله

من جوه المشروع:

# فولدر جديد جنب المشروع، وعليه branch جديدgit worktree add ../atelier-admin -b feature/admingit worktree add ../atelier-wishlist -b feature/wishlist# تشوف كل الـ worktreesgit worktree list

وبعدين تفتح terminal لكل واحد، وتشغّل Claude جواه:

cd ../atelier-admin && claude# وفي terminal تانيcd ../atelier-wishlist && claude

كل Claude شايف فولدره بس، وبيعمل commits على الـ branch بتاعه. والإصدارات الجديدة من Claude Code فيها flag بيعمل الـ worktree ويفتح الجلسة فيه في خطوة واحدة، راجع الـ docs لاسمه.

حاجات هتقابلك

الـ worktree فيه الملفات اللي في Git بس، فـ:

  • الـ dependencies مش موجودة: شغّل pnpm install في كل worktree.
  • ملف .env.local مش موجود: لأنه برا Git. انسخه بنفسك. ومتخليش Claude يقراه، الـ deny rule شغالة هنا كمان لو .claude/settings.json متعمله commit.
  • الـ dev server: لو الاتنين شغّلوا pnpm dev على port 3000 هيتخانقوا. ادّي كل واحد port، زي pnpm dev --port 3001.
  • الداتابيز واحدة: لو الاتنين بيعملوا migrations على نفس الداتابيز، هيلخبطوا بعض. اعمل الـ migrations في feature واحدة بس في الوقت ده، أو استخدم branch داتابيز لكل worktree لو الـ provider بيدعم ده (Neon مثلًا فيه branches).

اختار features مستقلة

في الآخر: راجع و merge واحدة واحدة

# بعد ما تراجع شغل الـ admingit checkout maingit merge feature/admin# امسح الـ worktree بعد ما خلصتgit worktree remove ../atelier-admingit branch -d feature/admin

راجع كل branch لوحده زي ما بتراجع أي شغل: git diff main...feature/admin، وشغّل التستات، وافتح الصفحة بعينك. اعمل merge لواحدة، وبعدين التانية. ولو حصل conflict، تقدر تطلب من Claude يحلّه، بس راجع الحل.

ابدأ باتنين بس. كل agent زيادة معناه مراجعة زيادة عليك إنت، وإنت اللي في الآخر بتقرر إيه يدخل main.

خلّصت الفصل لما

🧠 اختبر نفسك
١) ليه منشغّلش اتنين Claude في نفس الفولدر يكتبوا كود؟
لأنهم هيعدّلوا نفس الملفات ونفس الـ branch، ويبوّظوا شغل بعض.
٢) عملت worktree جديد و pnpm dev مش شغال. أول حاجة تبص عليها؟
الـ dependencies والـ .env.local، لأنهم مش في Git. وبعدين الـ port لو فيه سيرفر تاني شغال.
٣) الاتنين features بيعدّلوا الـ cart. ينفع worktrees؟
ينفع، بس هتقابل conflicts. الأحسن تعملهم ورا بعض، أو تقسّم الشغل بحيث كل واحد يلمس ملفات مختلفة.