mrsaynothing.dev
Jujutsu v0.46 تحت المجهر: ما الذي تغيّر ومن ينبغي أن يتحرك

> Jujutsu v0.46 تحت المجهر: ما الذي تغيّر ومن ينبغي أن يتحرك▋

قراءة ثانية لـ jj بعد أسبوعين: الإصدار v0.46.0 يقدّم التسكن عبر worktrees، والسجل كسب 216 نجمة، وفجوة التراجع اتّسعت. ما تغيّر، ما ينكسر، من يتحرك.

mrsaynothing· 13 أكتوبر 2026· 6 دقيقة قراءة آخر اختبار 2026-10-13

قبل أسبوعين قرأ هذا الموقع سجل jj أول مرة وسمّاه زر التراجع الذي وُلد git بلا منه — 31 796 نجمة، إصدارات شهرية، سجل عمليات واحد. اليوم القراءة الثانية: 32 012 نجمة (+216 في الأسبوعين)، صدر v0.46.0 قبل ستة أيام، والمستودع دُفع الساعة 05:22 UTC من صباح اليوم، قبل أن تُشعَل الغلاية.

سطر الصدق، كما في المرة السابقة: قرأت السجل، لم أشغّل الأداة. كل ما يلي يأتي من ملاحظات إصدار v0.46.0، والسجل العام للمستودع، وقراءتنا الأولى. ما تضيفه القراءة الثانية هو ما لا تستطيع الأولى امتلاكه: الفارق. أسبوعان من الإصدارات، أسبوعان من النجوم، أسبوعان من بيانات بحثنا الخاصة تتراكم خلف السؤال نفسه.

والكذبة التي يرفضها هذا المقال: أن يكون رقم الإصدار خبرًا. معظم الإصدارات الثانوية سباكة. v0.46.0 ليست كذلك — إنها تغيّر حساب التحويل، وبيانات الطلب خلال الأسبوعين تفسّر لماذا يهم هذا أكثر مما يعترف به changelog.

ما الذي تغيّر في Jujutsu v0.46؟ مساحات العمل يمكنها الآن التسكن عبر worktrees حقيقية لـ git (jj workspace add --colocate)، ويرفض jj undo/jj redo افتراضيًا العمليات العابرة لمساحات العمل، ويتحقق jj bisect run من نقطتيه، وارتفع الحد الأدنى لـ git إلى 2.42.0. المستودعات المتسكنة تبقى git عاديًا أمام GitHub والزملاء.

سجل الأسبوعين

الأرقام أولًا، فهي الجزء الوحيد من هذا المقال الذي لا يستطيع أحد مناقشته.

القياسالقراءة الأولى (29 سبتمبر)القراءة الثانية (13 أكتوبر)
نجوم GitHub31 79632 012 (+216 / 14 يومًا ≈ 15/يوم)
آخر إصدارv0.45.1 (3 سبتمبر)v0.46.0 (7 أكتوبر — فجوة 34 يومًا)
آخر دفع للمستودعنشط05:22 UTC اليوم
العلل المفتوحة—1 260

النجوم غرور، والإيقاع إشارة: إصداران في ستة أسابيع مع كسور مذكورة بأمانة — مشروع يسلّم ويقول لك ما كسره. والـ 1 260 علة مفتوحة تُقرأ بالطريقة نفسها — أداة متحركة، لا أداة منتهية.

وسجلّنا الخاص يحمل الإشارة الثانية. أكبر عائلة ظهورات في عنقود git هذا الشهر ما زالت التراجع عن commit مع الإبقاء على التغييرات — ظهورات +100% أسبوعًا بعد أسبوع، ونقرات تكاد تكون صفرًا، لأن الجواب الصادق في git على عمق ثلاث أوامر والقراء يشعرون بذلك. الطلب على التراجع لم ينتظر jj. وهو لا ينتظر أبدًا.

Jujutsu مقابل git: جدول التراجع

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

git: مقامرة الـ refs commit ← commit ← commit الفرع يشير إلى القمة التراجع = حرّك المؤشر، ودُ أن تكون وضعته في الـ shard الصحيح reflog · ORIG_HEAD · reset --soft ثلاث أدوات، مهمة واحدة، صفر ضمانات jj: سجل العمليات op 412 ← op 411 ← op 410 كل أمر يضيف عملية واحدة التراجع = خطوة للخلف عملية واحدة الإعادة = خطوة للأمام من جديد jj op log · jj undo · jj redo أداة واحدة، مهمة واحدة، مسجّلة
الـ commits نفسها في الأسفل. الفرق في الدفتر الثاني: git يتذكّر أين أشارت الـ refs؛ وjj يتذكّر ماذا فعلت.
المهمةgit (التعويذة)jj (العملية)
تراجع عن آخر شيء فعلتهالـ reflog، عينان مريقتان، reset --soft أو reset --keepjj undo
تراجع عن التراجعلا طريق نظيفjj redo
انظر ما حدث للتوgit reflogjj op log
عدّل آخر commitgit commit --amendحرّر الملفات — commit نسخة العمل يعدّل نفسه
أجّل تعارضًا إلى لاحقًاغير مسموح — احلّه الآن أو توقّفالتعارضات commits؛ حلّها متى شئت

في git، التراجع علم آثار — انقب في الـ reflog، جد الشظية، أعد البناء. في jj، الشريط لم يُدفن قط: التراجع عملية على سجل العمليات. تنقيب مقابل زر إرجاع.

تخيّل: git يمنحك مسجّل الرحلة — مثبّتًا خلف الطائرة، يُقرأ بعد التحطم. jj ثبّته على لوحة القيادة وشبكه بزر إرجاع.

v0.46.0: التغييران المهمان

مساحات عمل تتسكن عبر worktrees حقيقية لـ git. jj workspace add --colocate (أو إعداد git.colocate) يضع مساحة عمل jj بجوار checkout عادي لـ git دون أن يستحوذ على النسخة. اقرأها كتوسعة منحدر الدخول: يمكن لفريق أن يشغّل مساحة عمل jj إلى جوار checkout لـ git على الجهاز نفسه، والمستودع نفسه، ويقارن — وهي بالضبط التجربة التي طالب بها حكم القراءة الأولى. يستند إلى git worktree add --orphan، ولهذا ارتفع الحد الأدنى لـ git إلى 2.42.0.

تراجع يعرف حدوده. يرفض jj undo وjj redo الآن لمس عمليات مساحة عمل أخرى ما لم تمرر --allow-cross-workspace. أداة حجتها كلها أن «التراجع آمن» تشدّ الحواجز حول التراجع — اختبار الثقافة ناجح. وبقية الملاحظات تُقرأ بالطريقة نفسها: jj bisect run يتحقق من نقطتي النهاية قبل السير، وjj split توقّف المراوغة بين جلسات المحرر.

جرّب المسجّل بلا أي مخاطرة

في نسخة مستنسخة للاستخدام مرة واحدة، شغّل jj git init --colocate — يظهر مجلد .jj بجوار .git، ويواصل git العمل كما كان تمامًا، ويعرض jj op log المسجّل وهو يعمل. لا شيء يتغير على جهة git؛ وباب الخروج هو rm -rf .jj.

تحقق: jj op log في تلك النسخة يسرد عملياتك بأختام زمنية — سطر لكل أمر يعني أن السجل حقيقي على جهازك، لا في الوثائق فحسب.

الدفتر الصادق: ما الذي ينكسر

الذاكرة العضلية، أولًا. رقصة الفهرس — git add -p، التجهيز الجزئي — تُقابل بـ squash وsplit في jj، تحلّان المشكلة نفسها بأيادٍ أخرى. في أسبوعك الأول ستكتب أفعال git وستتضايق.

انطباع الفريق، ثانيًا. المستودعات المتسكنة تبدو git عاديًا للاستضافة وللزملاء — لكن commits نسخة العمل لمستخدم jj لا تصبح مرئية إلا عند الدفع، وسؤال «أين عملي الناقص؟» يجيب بإجابة مختلفة عما يتوقعه أهل git. الفرق الصغيرة تهزّ كتفيها؛ والمستودعات أحادية الشيفرة ذات الأدوات العميقة عليها الانتظار. رفض التراجع عبر مساحات العمل في v0.46 حدّ إضافي يُتعلَّم — عن قصد، وبصدق، القرار الصحيح.

والإيصال الذي ما زال غائبًا: قياسات الأداء. بعد قراءتين، ما زالت الدعوى غير مرفوعة. لا أستطيع أن أقول لك إن rebase في jj يتفوق على git في مستودع من 10 000 commit، لأنني لم أشغّله — هذا الرقم لا وجود له قبل وجود القياس، والقراءة الثانية لا تحوّل قراءة سجل إلى قياس.

الحكم، منقّحًا: من ينبغي أن يتحرك هذا الأسبوع

قالت القراءة الأولى: جرّبه. أسبوعان وإصدار واحد لاحقًا، تحرّك الحساب في اتجاه واحد — خفّضت التسكن عبر worktrees في v0.46 كلفة التجربة نفسها، وتصلّبت بيانات الطلب. عائلة التراجع التي تتابعها لوحتنا لم تبرد ظهورة واحدة؛ والأداة التي تجيب عنها بأمر واحد سلّمت مرتين. حين تظل الفجوة بهذا الاتساع تتوسع، فلسيأتي من يسدّها. jj يسدّها على مستوى النموذج، لا مستوى القاعدة الذهنية — المقارنة الكاملة في عنقود git-undo، بجوار القرار الكلاسيكي الذي يزعزعه: revert vs reset، الذي صار له جواب ثالث، والجواب الثالث زر.

تحرك الآن: المطورون المنفردون والفرق الصغيرة ذات ندوب التراجع؛ وكل من يعلّم git وسئم رؤية الوجوه تسقط عند الـ reflog؛ و— المسار الذي نراقبه عن كثب — المستودعات المُدارة بالوكلاء، حيث ينبغي لكل عملية أن تكون عكوسة وقابلة للتدقيق افتراضيًا. سجل العمليات هناك ليس ترفًا؛ إنه سطح التدقيق الذي لم يسلّمه git قط.

انتظر: سلاسل أدوات git العميقة، وافتراضات CI المثقلة بالـ hooks، ومن في بوادر الهجرة. وانتظر القياس — سيُواجه المقال القادم عن jj في هذا الموقع jj بـ git على مستودع حقيقي ويطبع أقبح رقم أولًا، لأن سجل الأسبوعين اشترى حسن الظن مرة واحدة بالضبط.

سؤالان قبل ذلك القياس: هل خذلك إنقاذ بالـ reflog في أسوأ لحظة ممكنة — وإذا شغّلت jj على محمل الجد هذا الشهر، فما الذي ينكسر أولًا؟ التعليقات مفتوحة؛ أخبرنا بما يجب اختباره.

$ احصل على الطرح التالي بالبريد

رسالة واحدة لكل مقال. وافق أو حطّمها.

self-hosted · بلا أطراف ثالثة · إلغاء الاشتراك بنقرة واحدة

بريد واحد أسبوعيًا. صفر أدوات تتبع.

ما هذا؟