تخطَّ إلى المحتوى

Jujutsu (jj) - نظام التحكم في الإصدارات المتوافق مع Git

Jujutsu (jj) - نظام التحكم في الإصدارات المتوافق مع Git

Jujutsu (jj) هو نظام تحكم في الإصدارات حديث متوافق مع Git — يستخدم مستودع Git كخلفية له، لذا يمكنك تبنيه على المستودعات الموجودة والتعاون مع الزملاء الذين يستخدمون Git. نموذجه مختلف وأبسط للكثيرين: نسخة العمل هي التزام بحد ذاتها (لا توجد منطقة تجهيز منفصلة)، والتضاربات هي كائنات من الدرجة الأولى يمكنك الالتزام بها وحلها لاحقاً، وكل عملية يتم تسجيلها في سجل العمليات الذي يمكنك التراجع عنه. لا توجد فروع بمعنى Git بشكل افتراضي؛ تعمل مع التغييرات المعرّفة بواسطة معرّفات التغيير المستقرة.

التثبيت

المنصةالأمر
Cargocargo install --locked jj-cli
macOS (Homebrew)brew install jj
Arch Linuxsudo pacman -S jujutsu
Nixnix profile install nixpkgs#jujutsu
Windows (Scoop)scoop install jujutsu
التحققjj --version

الإعداد

الأمرالوصف
jj config set --user user.name "Your Name"اضبط اسمك
jj config set --user user.email "you@example.com"اضبط بريدك الإلكتروني
jj git init --colocateهيّئ jj في مستودع Git موجود (يحتفظ بـ .git)
jj git clone <url>استنسخ مستودع Git مع jj
jj git initإنشاء مستودع jj جديد (خلفية أصلية)

المفاهيم الأساسية

المصطلحالمعنى
التغييرتغيير منطقي مع معرّف تغيير مستقر (يبقى عند إعادة الكتابة)
الالتزاملقطة؛ نسخة العمل دائماً التزام (@)
@التزام نسخة العمل الحالية
Revsetلغة استعلام لتحديد الالتزامات
سجل العملياتسجل العمليات في المستودع، كل منها قابل للتراجع
الإشارة المرجعيةمؤشر مسمى (الخريطة إلى فرع Git عند الدفع)

سير العمل اليومي

الأمرالوصف
jj statusاعرض تغييرات نسخة العمل
jj logاعرض الرسم البياني للالتزامات
jj diffفرق التزام نسخة العمل
jj describe -m "msg"اضبط/استبدل رسالة الالتزام الحالي
jj newابدأ تغييراً جديداً على رأس الحالي
jj new <rev>ابدأ تغييراً جديداً على رأس التزام محدد
jj edit <rev>اجعل التزاماً موجوداً نسخة العمل
jj commit -m "msg"صف @ وابدأ تغييراً جديداً (مثل Git)

نقل وتحرير السجل

الأمرالوصف
jj squashانقل التغييرات من @ إلى الأب الخاص به
jj squash -iاختر بشكل تفاعلي ما الذي ستدمجه
jj splitانقسم الالتزام الحالي إلى اثنين
jj rebase -d <dest>أعد بناء التغيير على الوجهة
jj abandon <rev>اترك التزام
jj duplicate <rev>انسخ التزام في مكان آخر

ميزة القاتل: التراجع

الأمرالوصف
jj op logاسرد كل عملية تم تنفيذها
jj undoتراجع عن العملية الأخيرة
jj op restore <id>استعيد المستودع إلى حالة عملية سابقة

لأن كل أمر هو عملية، يمكن التراجع عن كل شيء تقريباً — بما في ذلك إعادة البناء والتخلي.

الإشارات المرجعية وتشغيل Git

الأمرالوصف
jj bookmark create main -r @إنشاء إشارة مرجعية (≈ فرع Git)
jj bookmark set main -r @انقل إشارة مرجعية إلى التزام
jj git fetchاستحضر من الجهاز البعيد Git
jj git pushادفع الإشارات المرجعية إلى الجهاز البعيد Git
jj git push -c @أنشئ فرع بعيد من التغيير الحالي

Revsets (تحديد الالتزامات)

Revsetتحديد
@التزام نسخة العمل
@-أب نسخة العمل
mainالالتزام الذي تشير إليه الإشارة المرجعية
mine()التزاماتك
ancestors(@)جميع الأسلاف من @
jj log -r "description(glob:''fix*'')"الالتزامات التي تطابق رسالتها

سير العمل الشائع

# تبني jj في مستودع Git موجود، استمر في العمل مع الأجهزة البعيدة لـ Git
jj git init --colocate
jj log

# قم بإجراء تغيير بدون تجهيز — فقط عدّل الملفات، ثم صفها
# (الملفات ذات لقطة تلقائية في @)
jj describe -m "Add feature"
jj new                       # ابدأ التغيير التالي

# عوه — تراجع عن آخر شيء فعلته (حتى إعادة بناء)
jj undo

# ادفع التغيير الحالي كفرع للمراجعة
jj bookmark create feature -r @
jj git push -c @

jj مقابل Git

الجانبJujutsu (jj)Git
منطقة التجهيزلا توجد (نسخة العمل هي التزام)Index/staging
التضارباتمن الدرجة الأولى، قابلة للالتزاميجب حل قبل المتابعة
التراجععام عبر سجل العملياتReflog (جزئي)
الفروعالإشارات المرجعية (اختيارية)الفروع (مركزية)
الخلفيةمتوافقة مع GitGit

الموارد