جيت هو نظام مراقبة نسخة شعبية. في Git ، يسمى التغيير الذري لملف واحد أو عدة ملفات بالالتزام ، ويتم دمج عدة عمليات متعاقبة في فرع. تستخدم الفروع لتنفيذ أفكار جديدة (ميزات).
يحدث أن الفكرة وصلت إلى طريق مسدود وأن المطور قد غير الطريق الصحيح ، لذلك فهو بحاجة إلى العودة إلى الإصدار الأصلي. يجب أن ينسى الفرع الجديد ، والتحول إلى الفرع الرئيسي أو الفرع الرئيسي ومواصلة العمل. في هذه الحالة ، سيتم تعليق "السليل" إلى الأبد ، وكذلك الرغبة في إزالته. ولكن كيفية إزالة جزء من التاريخ؟ يوضح هذا الفرع جهود المبرمج الذي يعمل بجد ، حتى لو لم يكن هباء. لذلك سيكون من الأسهل إبلاغ المدير ، لأن النتيجة غير الناجحة هي أيضًا نتيجة!
أسارع إلى السعادة لأن مطوري Git سيقومون بتقديم أمر جديد لإغلاق هذه الفروع "المشردة" في الإصدار الثالث. الإصدار الحالي هو 2.21.0 .
كيفية استخدام هذا الأمر ، ما هي الفوائد التي يقدمها وماذا تفكر شركات تكنولوجيا المعلومات؟ المقال يجيب على هذه الأسئلة وغيرها.
وصف
من الممكن الآن إغلاق فرع غير ناجح على أحد التعديات السابقة. أقواس إغلاق باللون الأصفر في الصور أدناه.
الالتزام 4
هو آخر ميزة غير ناجحة. تم إغلاقه على الالتزام 1
، ثم عدنا إلى المعلم ونذهب في الاتجاه الآخر (الالتزام 5
).
يمكنك أيضًا إغلاق الالتزام على نفسه ، وبالتالي إنشاء حلقات :
يمكنك إغلاق الفرع على أي التزام - Git ذكي ، فهو يحسب الاختلافات ويدمج كل شيء بشكل صحيح:
كيف تستخدم؟
لا يتضمن أمر merge
وظيفة عمليات الإغلاق ، لأنه في الحالة الأولى سيتم إعادة توجيه الفرع سريعًا ، ولن يتم تنفيذ أي شيء في الحالة الثانية ( git already up to date
).
من أجل عدم تغيير السلوك القديم ، قرر المطورون تقديم أمر إغلاق:
git closure -s $source_commit -d $dest_commit -m $message
تعيّن الوسيطة الأولى -s $source_commit
تجزئة الالتزام الذي تريد منه تمديد الحلقة ، بينما تعين الثانية (اختياري) -d $dest_commit
الالتزام الذي سيتم فيه إغلاق الحلقة. في حالة غيابه ، يحدث الإغلاق في فرع السحب الحالي. تقوم الوسيطة -m $message
بتعيين رسالة إغلاق ، مثل failed feature, revert to origin
. ومع ذلك ، فإن --allow-empty-message
متاح أيضًا ، والذي يسمح بالقيام بدون رسائل. بشكل افتراضي ، يسمح Git بإغلاق واحد فقط لزوجين من الالتزامات. لتجاوز هذا القيد ، --allow-multiple-closures
خيار --allow-multiple-closures
.
بعد تنفيذ الأمر ، يحسب Git التغييرات ، وفي الالتزام النهائي ، سيتم عرض فرق مزدوج: من الفروع الأساسية والفرعية. في الحالة العامة ، هو فرق ن الأبعاد ، أي أنه يمكن أن يكون هناك العديد من عمليات الإغلاق كما يحلو لك. يشبه الإغلاق-الالتزام الالتزام بالاختلاف الوحيد الذي يحتوي على عدة رسائل ، وليس رسالة واحدة.
لسوء الحظ ، ليس لدى واجهة المستخدم الرسومية Git الموجودة دعم جيد لعمليات الإغلاق. يعرض إصدار معاينة GitExtensions منحنيات الدمج بدلاً من الأقواس الأنيقة. ألقِ نظرة على الحقول الجديدة مثل Closure message
Closure diff
:
تجدر الإشارة إلى أن أمر closure
دائمًا ما يغير التاريخ (كما هو الحال الآن Git عبارة عن آلة زمنية كاملة!) ، لذا أصبح من الممكن الآن دفع الفروع فقط باستخدام خيار - --force
، أو آمن --force-with-lease
خيار --force-with-lease
.
Rebase متاح أيضًا للفروع ذات العروات ، على الرغم من أن منطق إعادة حساب التعقيدات معقد.
كما يسمح الخيار التلقائي للإغلاق التلقائي لجميع الفروع القديمة. في هذه الحالة ، يكون التزام الإغلاق هو الذي يبدأ الفرع. مع الإضافات Git IDE ، يمكن تشغيل الإغلاقات بشكل دوري. في GitExtensions ، يوجد مكون إضافي مماثل يحذف الفروع القديمة .
ما تفكر شركات تكنولوجيا المعلومات
شركات تكنولوجيا المعلومات الكبيرة: Google و Facebook و Apple و DeepMind و Positive Technologies ، وخاصة Microsoft ، تنتظر بفارغ الصبر إغلاقها ، لأنه الآن سيكون من الممكن إضفاء الطابع الرسمي على دورة حياة الفروع ، بما في ذلك الفروع غير المدمجة.
كتب مايكل ريختر أحد كبار مديري مايكروسوفت:
الميزة الجديدة لـ Git ، بالطبع ، ستقلل من الفوضى في عالم تطوير المصادر المفتوحة (وليس فقط). هناك الكثير من الفروع "المعلقة" في مستودعاتنا. على سبيل المثال ، في vscode لدينا أكثر من 200 منهم ، وفي TypeScript أكثر من 300! وهذه المشكلة ليست فقط مشكلتنا. لا تؤدي عمليات الإغلاق إلى تحسين التنظيم فحسب ، بل تتيح أيضًا تتبع تفكير المبرمج ، وأحيانًا تكون غير مفهومة تمامًا حتى للزملاء: ذكّرتني الإغلاقات بفيلم "الرجوع إلى المستقبل" ، حيث سارت الشخصيات إلى الماضي والمستقبل. أحببت هذا الفيلم ، شاهدته عدة مرات. وأعتقد أنني سوف أحب جيت أكثر لأنه إذا كانت هذه الميزة :)
مذكرة
إذا كان الرسم البياني للالتزامات في وقت سابق هو رسم بياني موجه (DAG) ، فإن الإغلاقات تمدده إلى رسم بياني موجه عام. باستخدام Git ، يمكنك وصف التعبيرات العادية التي يتم فيها تنفيذ الحالات ، والأبجدية هي مجموعة من جميع الرسائل. ولكن هذا هو موضوع لوحة "البرمجة غير الطبيعية" ، وبالتالي يتجاوز نطاق هذه المقالة. ومع ذلك ، إذا كان هذا يبدو مثيراً للاهتمام بالنسبة لك ، فراجع المقال حول كيفية تخزين أشجار العائلة داخل Git.