Git Worktree

1 دقيقة

جدول المحتويات

  1. ما هو worktree؟
  2. لماذا worktree؟
  3. استخدام عملي
  4. أوامر أساسية

1. ما هو worktree؟

Git worktree = امتلاك عدة مجلدات عمل لـ نفس المستودع.

المفهوم:

  • مستودع Git واحد = عادة مجلد واحد
  • مع worktree = مستودع واحد، عدة مجلدات
  • يمكن لكل مجلد أن يكون على فرع مختلف

تشبيه: كأن لديك عدة مكاتب للمشروع نفسه.

العودة إلى جدول المحتويات

2. لماذا worktree؟

مشكلة كلاسيكية:

bash
# تعمل على feature-A
git checkout feature-A
# شفرة، شفرة، شفرة... (عمل غير منتهٍ)

# طارئ: خطأ على main!
git stash                # حفظ العمل الجاري
git checkout main        # التبديل إلى main
# إصلاح الخطأ...

git checkout feature-A   # العودة إلى عملك
git stash pop           # استرجاع العمل الجاري

حل worktree:

bash
# تعمل على feature-A في المجلد الرئيسي
# طارئ؟ أنشئ مجلداً جديداً لـ main!
git worktree add ../hotfix main

# الآن:
# - ./           → feature-A (عملك يتواصل)
# - ../hotfix    → main (للإصلاح العاجل)

المزية: لا stash ولا تبديل. مجرد مجلدين ومهمتين متوازيتين!

العودة إلى جدول المحتويات

3. استخدام عملي

الإعداد الأساسي:

bash
mkdir demo-worktree && cd demo-worktree
git init

echo "print('main v1')" > app.py
git add . && git commit -m "Main version"

# إنشاء فرع ميزة
git checkout -b feature-new
echo "print('feature work')" > feature.py
git add . && git commit -m "Feature work"

git checkout main

إنشاء worktrees:

bash
# إنشاء worktree لـ feature-new
git worktree add ../feature-work feature-new

# إنشاء worktree لفرع جديد
git worktree add ../hotfix-branch -b hotfix

# عرض كل الـ worktrees
git worktree list

النتيجة:

demo-worktree/       → main branch
../feature-work/     → feature-new branch
../hotfix-branch/    → hotfix branch (nouvelle)

العمل بالتوازي:

bash
# الطرفية 1: المجلد الرئيسي (main)
cd demo-worktree
echo "print('main updated')" >> app.py
git add . && git commit -m "Update main"

# الطرفية 2: عمل الميزة
cd ../feature-work
echo "print('feature complete')" >> feature.py
git add . && git commit -m "Complete feature"

# الطرفية 3: الإصلاح العاجل
cd ../hotfix-branch
echo "print('urgent fix')" > fix.py
git add . && git commit -m "Critical fix"

سحر: 3 فروع، 3 مجلدات، صفر تبديل سياق!

العودة إلى جدول المحتويات

4. أوامر أساسية

الأمرالإجراء
git worktree add <path> <branch>إنشاء worktree على فرع موجود
git worktree add <path> -b <new-branch>إنشاء worktree + فرع جديد
git worktree listعرض كل الـ worktrees
git worktree remove <path>حذف worktree
git worktree pruneتنظيف الـ worktrees المحذوفة

حالات استخدام نموذجية:

1. إصلاح عاجل:

bash
git worktree add ../hotfix main
cd ../hotfix && echo "fix" > fix.py
git add . && git commit -m "Hotfix"
git push origin main

2. مراجعة طلب سحب:

bash
git worktree add ../pr-review pr-branch
cd ../pr-review  # اختبر طلب السحب دون إزعاج عملك

3. مقارنة فروع:

bash
git worktree add ../version-a branch-a
git worktree add ../version-b branch-b
# قارن الملفات بين ../version-a و ../version-b

التنظيف:

bash
git worktree remove ../feature-work
git worktree remove ../hotfix-branch
git worktree prune                    # تنظيف المراجع

Worktree = تعدّد مهام Git بلا تنازلات!

العودة إلى جدول المحتويات