جيت هو نظام مراقبة نسخة شعبية. في ذلك ، يُطلق على التغيير الذري لملف واحد أو أكثر اسم الالتزام ، ويتم دمج عدة عمليات متعاقبة في الفرع. تستخدم الفروع لتنفيذ أفكار جديدة (ميزات).
يحدث أن تتحول الفكرة إلى طريق مسدود ، ويوقف المطور الطريق الخاطئ ، وهناك حاجة إلى العودة إلى الإصدار الأصلي ، لذلك عليك أن تنسى الفرع الجديد والتحول إلى المطور الرئيسي أو الرئيسي ، ثم تواصل العمل كما لو لم يحدث شيء. في هذه الحالة ، سيتم تعليق "إطلاق النار" إلى الأبد ، مثل الرغبة في إزالته. لكن كيف تحذف إذا كانت جزءًا من القصة؟ تُظهر هذه العملية جهود مبرمجي مدمني العمل ، وإن لم يكن عبثًا. من الأسهل إبلاغ السلطات بذلك ، لأن النتيجة غير الناجحة هي أيضًا نتيجة!
أسارع إلى الإرضاء: سيطوّر مطورو Git في الإصدار 3 أمرًا جديدًا لإغلاق هذه الفروع الضالة. دعني أذكرك أن الإصدار الحالي هو 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
.
بعد تنفيذ الأمر ، ستحسب البوابة نفسها التغييرات ، وفي الالتزام النهائي ، سيكون الفرق المزدوج مرئيًا: من الفروع الأساسية والفرعية. بشكل عام ، هذا فرق ذو أبعاد n ، أي أنه يمكنك إجراء الإغلاق عدة مرات كما تريد. يشبه الإغلاق-الالتزام-دمج-مع اختلاف أنه يخزن عدة رسائل ، لا رسالة واحدة.
لسوء الحظ ، لا تدعم واجهة المستخدم الرسومية الحالية للعمل مع Git الإغلاقات بشكل كامل. إصدار المعاينة من GitExtensions يبني منحنيات مثل دمج بدلاً من قوس جميل. لاحظ حقول Closure diff
الجديد و Closure diff
:
تجدر الإشارة إلى أن فريق closure
دائمًا ما يغير التاريخ (لا يزال ، Git الآن عبارة عن آلة زمنية كاملة!) ، لذا يمكنك الآن --force
الفروع فقط من خلال خيار - --force
، أو باستخدام خيار آمن --force-with-lease
.
تتوفر عمليات Rebases للفروع ذات الحلقات ، ومع ذلك ، فإن منطق إعادة حساب التعقيدات فيها معقد.
أيضًا ، يتيح لك الخيار auto
تلقائيًا إغلاق جميع الفروع القديمة. في هذه الحالة ، يكون التزام الإغلاق هو الالتزام الذي بدأ منه الفروع. باستخدام المكونات الإضافية لـ Git IDE ، يمكن تشغيل الإغلاقات بشكل دوري. في GitExtensions ، يزيل المكون الإضافي " حذف الفروع المتقادمة" الفروع القديمة.
رأي شركات تكنولوجيا المعلومات
تتطلع شركات تكنولوجيا المعلومات الكبرى: Google و Facebook و Apple و DeepMind و Positive Technologies ، وخاصة Microsoft ، إلى الإغلاق ، لأنه سيكون من الممكن الآن إضفاء الطابع الرسمي على دورة حياة الفروع ، بما في ذلك الفروع غير المتجاورة.
كتب مايكل ريختر أحد كبار مدراء مايكروسوفت:
الميزة الجديدة للبوابة ستقلل بالتأكيد الفوضى في عالم تطوير المصادر المفتوحة وليس فقط. تحتوي مستودعاتنا على الكثير من الفروع المعلقة. على سبيل المثال ، يوجد أكثر من 200 منهم في vscode ، وهناك أكثر من 300 منهم في TypeScript ! وهذه ليست مشكلة Microsoft فقط. لا تؤدي عمليات الإغلاق إلى تحسين المؤسسة فحسب ، بل تتيح لك أيضًا تتبع منطق المبرمج ، وأحيانًا غير مفهومة تمامًا حتى للزملاء :) ذكّرني الإغلاق بفيلم "الرجوع إلى المستقبل" - حيث سارت الشخصيات إلى الماضي والمستقبل. أنا أحب هذا الفيلم ، لقد راجعت عدة مرات. وأعتقد أنني سوف أحب بوابة بسبب هذا أكثر :)
مذكرة
إذا كان الرسم البياني للالتزام في وقت سابق عبارة عن رسم بياني موجه (DAG) ، فإن الإغلاقات تمدده إلى رسم بياني موجه معمم. باستخدام Git ، سيكون من الممكن وصف التعبيرات المعتادة التي يتم فيها تنفيذ الحالات ، والأبجدية هي مجموعة من جميع الرسائل. لكن هذه الصفعات من المحور "البرمجة غير طبيعية" ، وبالتالي هو خارج نطاق المقال. ومع ذلك ، إذا كنت مهتمًا بهذا ، تحقق من المقالة التي تصف كيف يمكنك تخزين أشجار العائلة داخل Git.