للعمل على فرع ثانٍ دون إرباك تفريع مشروعك الحالي على نظام Mac، أنشئ شجرة عمل Git (worktree) في مجلد مجاور. تمتلك كل شجرة عمل ملفاتها الخاصة والفرع المستخرج (checked-out)، مع مشاركة بيانات المستودع مع التفريع الرئيسي. أنشئها من Terminal، وافتح مجلدها في Finder أو في محرر الأكواد الخاص بك، وأزلها باستخدام Git عند الانتهاء. وثائق worktree الخاصة بـ Git

ما الذي تغيّره شجرة العمل (worktree)

تمنحك شجرة العمل (worktree) دليل عمل آخر متصلاً بنفس مستودع Git. هذا يعني أنه يمكنك، على سبيل المثال، إبقاء تفريع main الحالي مفتوحاً بينما يحصل فرع الميزة (feature branch) على مجلد وملفات منفصلة. لا تؤدي التغييرات في أحد أدلة العمل إلى استبدال الملفات المستخرجة في الدليل الآخر. يشارك Git بيانات المستودع، لكنه يحتفظ بحالة خاصة بكل شجرة عمل بشكل منفصل، مثل الفهرس وHEAD. Git: git-worktree

الفروع مشتركة عبر شجرات العمل، وعادةً لا يمكن استخراج فرع محلي في شجرتي عمل في نفس الوقت. تناسب شجرات العمل المهام المنفصلة والمتزامنة؛ فهي ليست استنساخات (clones) مستقلة للمستودع. قد يلزم إنشاء الملفات التي يتجاهلها Git، مثل ملفات التكوين المحلي أو مخرجات البناء، بشكل منفصل في المجلد الجديد.

إنشاء شجرة عمل لميزة معينة على نظام macOS

افتح تطبيق Terminal وانتقل إلى دليل مشروعك الحالي. استبدل my-app باسم دليل المستودع الخاص بك. يفترض المثال أنه موجود في ~/Projects/my-app ويقوم بإنشاء التفريع الجديد بجواره.

cd ~/Projects/my-app
git status --short
git worktree add -b feature/search-ui ../my-app-search-ui

يتيح لك أمر الحالة (status) معرفة ما إذا كان التفريع الحالي يحتوي على تغييرات معلقة قبل تبديل السياق. ينشئ الأمر add -b فرعاً محلياً جديداً باسم feature/search-ui ويستخرجه في الدليل المجاور my-app-search-ui. ينشئ Git فرعاً انطلاقاً من HEAD الحالي عند عدم تحديد نقطة تثبيت (commit) للبدء منها. اختر اسماً فريداً للفرع ومسار وجهة غير مستخدم بالفعل. Git: worktree add

بالنسبة لفرع محلي موجود بالفعل وغير مستخرج في شجرة عمل أخرى، استخدم اسمه بدلاً من -b واسم الفرع الجديد:

git worktree add ../my-app-search-ui existing-branch

إذا كان الفرع مستخرجاً بالفعل في مكان آخر، سيرفض Git ذلك افتراضياً. لا تفرض الأمر قسراً لمجرد تجاوز آلية الحماية؛ استخدم فرعاً مختلفاً أو اعمل في التفريع الذي يمتلكه بالفعل. لإنشاء شجرة عمل لفرع بعيد (remote)، اسحب بيانات الفرع البعيد (fetch) أولاً إذا لزم الأمر واتبع سلوك فرع التتبع (tracking-branch) الخاص بـ Git؛ وتحقق من اسم الفرع قبل إضافته.

فتح التفريع الجديد في Finder ومحرر الأكواد

في Finder، انتقل إلى المجلد الأصل الذي يحتوي على كلا دليلي المشروع، ثم افتح my-app-search-ui. يمكنك استخدام أمر "الانتقال إلى المجلد" في Finder بالضغط على (Shift-Command-G) وإدخال المسار الكامل، مثل ~/Projects/my-app-search-ui. احرص على إبقاء اسم الدليل ظاهراً في Finder أو في محرر الأكواد لتتمكن من تمييزه عن التفريع الأصلي.

توثق Apple أيضاً كيفية فتح Terminal عند مجلد محدد من Finder: أظهر شريط المسار عبر عرض > إظهار شريط المسار (View > Show Path Bar)، واضغط مع النقر على مفتاح التحكم (Control-click) على المجلد في شريط المسار، ثم اختر "فتح في Terminal". لفتح نافذة أو علامة تبويب أخرى في Terminal، استخدم Command-N أو Command-T. يصبح موقع المجلد المحدد هو دليل العمل لإجراء Finder. Apple: فتح نوافذ وعلامات تبويب جديدة في Terminal على Mac

افتح المجلد الجديد كمشروع منفصل في محرر الأكواد الخاص بك باستخدام أداة فتح المجلدات الموثقة في هذا المحرر. يختلف سلوك المحررات؛ فشجرات عمل Git لا تنشئ نوافذ للمحرر تلقائياً ولا تقوم بتهيئة بيئة التطوير الخاصة بك. قد تتطلب أدلة التبعيات (dependencies)، والملفات المتجاهلة، وملفات البيئة المحلية، والخدمات قيد التشغيل إعداداً منفصلاً في كل تفريع.

التحقق من التفريع الذي تستخدمه

من أي من دليلي المشروع، نفّذ الأمر:

git worktree list

يعرض Git قائمة بشجرة العمل الرئيسية وشجرات العمل المرتبطة، بما في ذلك مساراتها والفروع المستخرجة. قبل إجراء التثبيت (commit) أو تشغيل الأوامر التي تعدل الملفات، تأكد من المجلد الحالي أو نفّذ الأمر git status هناك. يساعد هذا الفحص البسيط في تجنب الخطأ الشائع المتمثل في إجراء تعديلات في التفريع الأصلي بينما تقصد العمل في التفريع الجديد. Git: worktree list

إزالة شجرة عمل عند انتهاء المهمة

قم أولاً بتثبيت (commit) أي عمل تحتاجه أو حفظه بطريقة أخرى. بعد ذلك، ومن أي شجرة عمل تنتمي إلى المستودع، أزل التفريع المرتبط عبر المسار:

git worktree remove ../my-app-search-ui
git worktree list

يرفض Git عادةً إزالة شجرة عمل تحتوي على ملفات متتبعة معدلة أو ملفات غير متتبعة. راجع هذه الملفات واحتفظ بها قبل الإزالة؛ فالخيار --force يتجاوز حماية Git ويمكن أن يؤدي إلى فقدان العمل. يزيل الأمر دليل شجرة العمل، لذا لا تستخدمه كبديل للتحقق مما بداخله. بمجرد إزالتها، يظل الفرع متاحاً في المستودع ما لم يُحذف بشكل منفصل. Git: worktree remove

إذا حذفت مجلد شجرة العمل يدوياً، فقد يحتفظ Git بسجله الإداري. استخدم git worktree prune لتنظيف السجلات القديمة؛ ويُفضل استخدام git worktree remove للتنظيف العادي. إذا قمت بنقل تفريع مرتبط في Finder، فقد يفقد Git تتبع موقعه؛ استخدم git worktree move حيثما ينطبق ذلك أو git worktree repair لإعادة توصيله. Git: worktree prune وmove وrepair

يتمثل الإعداد العملي على نظام Mac في تخصيص مجلد شجرة عمل واحد لكل مهمة نشطة، مع تسمية المجلدات والفروع بأسماء قصيرة ويسهل التعرف عليها. احتفظ بالتفريع الرئيسي لعمله الحالي، وأنشئ تفريعاً موازياً لمهمة متزامنة، وتحقق من المسار قبل التعديل. يمنح ذلك كل مهمة ملفات المشروع الخاصة بها دون الحاجة إلى التبديل المتكرر لفرع التفريع الأصلي.

المصادر