يتوفر نظام التحكم بالمصدر Git 2.41

بعد ثلاثة أشهر من التطوير ، تم نشر إصدار نظام التحكم بالمصادر الموزع Git 2.41. يعد Git أحد أكثر أنظمة التحكم في الإصدارات شيوعًا وموثوقية وعالية الأداء التي توفر أدوات تطوير مرنة غير خطية تعتمد على الفروع المتفرعة والدمجية. لضمان سلامة السجل ومقاومة التغييرات بأثر رجعي ، يتم استخدام التجزئة الضمنية للتاريخ السابق بأكمله في كل التزام ، ومن الممكن أيضًا التحقق من العلامات الفردية والالتزام بالتوقيعات الرقمية من المطورين.

مقارنة بالإصدار السابق ، تم قبول 542 تغييرًا في الإصدار الجديد ، الذي تم إعداده بمشاركة 95 مطورًا ، شارك 29 منهم في التطوير لأول مرة. الابتكارات الرئيسية:

  • معالجة محسّنة للكائنات التي لا يمكن الوصول إليها والتي لم تتم الإشارة إليها في المستودع (لم تتم الإشارة إلى الفروع أو العلامات). تتم إزالة الكائنات التي يتعذر الوصول إليها بواسطة أداة تجميع البيانات المهملة ، ولكنها تظل في المستودع لفترة معينة قبل إزالتها لتجنب ظروف السباق. لتتبع فترة الكائنات التي يتعذر الوصول إليها ، من الضروري ربط الملصقات بها مع وقت تغيير الكائنات المماثلة ، مما لا يسمح بتخزينها في ملف حزمة واحد ، حيث يكون لجميع الكائنات وقت تغيير مشترك. في السابق ، كان يتم تخزين كل كائن لا يمكن الوصول إليه في ملف منفصل ، مما أدى إلى حدوث مشكلات إذا كان هناك عدد كبير من الكائنات الجديدة التي يتعذر الوصول إليها والتي لم يتم حذفها بعد. في الإصدار الجديد ، يتم استخدام آلية "حزم cruft" بشكل افتراضي لحزم الكائنات التي لا يمكن الوصول إليها ، مما يسمح بتخزين جميع الكائنات التي لا يمكن الوصول إليها في ملف حزمة واحد ، وعكس البيانات في وقت التعديل لكل كائن في جدول منفصل مخزن في ملف بامتداد ".mtimes" وربطه باستخدام ملف فهرس بامتداد ".idx".
    يتوفر نظام التحكم بالمصدر Git 2.41
  • افتراضيًا ، يتم تمكين الاحتفاظ بفهرس عكسي (revindex) على القرص لملفات الحزمة. عند اختباره على مستودعات torvalds / linux ، سمح لنا استخدام مؤشر عكسي بتسريع عمليات "git push" كثيفة الاستخدام للموارد بمقدار 1.49 مرة ، وعمليات بسيطة ، مثل حساب حجم كائن واحد باستخدام "git cat- ملف - دفعة = '٪ (objectize: disk)' »77 مرة. سيتم تخزين الملفات (".rev") ذات الفهرس العكسي داخل المستودع في دليل ".git / object / pack".

    تذكر أن Git يخزن جميع البيانات في شكل كائنات ، والتي يتم وضعها في ملفات منفصلة. لزيادة كفاءة العمل مع المستودع ، يتم وضع الكائنات بالإضافة إلى ذلك في ملفات الحزم ، حيث يتم تقديم المعلومات في شكل دفق من الكائنات يتبع واحدًا تلو الآخر (يتم استخدام تنسيق مماثل عند نقل الكائنات باستخدام git fetch و git أوامر الدفع). يتم إنشاء ملف فهرس (.idx) لكل ملف حزمة ، مما يسمح لك بتحديد الإزاحة بسرعة كبيرة في ملف الحزمة الذي يتم من خلاله تخزين الكائن المحدد بواسطة معرف الكائن.

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

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

    يتوفر نظام التحكم بالمصدر Git 2.41

  • تمت إضافة دعم لتمرير رؤوس WWW-Authenticate بين معالج بيانات الاعتماد وخدمة المصادقة إلى بروتوكول "مساعد الاعتماد" المستخدم لتمرير بيانات الاعتماد عند الوصول إلى المستودعات المقيدة. يسمح دعم عنوان WWW-Authenticate بتمرير معلمات نطاق OAuth إلى وصول مستخدم أكثر تفصيلاً إلى المستودعات وتحديد النطاقات المتاحة للطلبات.
  • خيار التنسيق المضاف "٪ (مقدمًا خلفًا: ) "، والذي يتيح لك الحصول على الفور على معلومات حول عدد الارتباطات الموجودة أو الغائبة في فرع معين ، بالنسبة إلى فرع آخر (مدى تأخر أحد الفروع أو تقدمه عن الآخر على مستوى الالتزامات). في السابق ، كان الحصول على هذه المعلومات يتطلب أمرين منفصلين: "git rev-list --count main..my-feature" للحصول على عدد الالتزامات الفريدة للفرع ، و "git rev-list --count my-feature .. main "للحصول على عدد الارتباطات المفقودة. الآن يمكن اختزال هذه الحسابات إلى تعليمة واحدة ، مما يبسط معالجات الكتابة ويقلل من وقت التنفيذ. على سبيل المثال ، لإظهار الفروع غير المدمجة وتقييم ما إذا كانت متأخرة أو متقدمة عن فرعها الرئيسي ، يمكنك استخدام سطر واحد: $ git for-each-ref - no-merged = origin / HEAD \ --format = ' ٪ (refname: short)٪ (forward-behind: origin / HEAD) '\ refs / heads / tb / | عمود -t tb / cruft-extra-tips 2 96 تيرابايت / لكل مرجع — استبعاد 16 96 تيرابايت / صور نقطية طافرة 47 3 بدلاً من النص المستخدم سابقًا ، والذي يكون أبطأ بـ 17 مرة: $ git for-each-ref - التنسيق = '٪ (اسم المرجع: قصير)' - غير مدمج = الأصل / الرأس \ المراجع / الرؤوس / السل | أثناء قراءة المرجع ، قم بالأمام = "$ (git rev-list --count origin / HEAD .. $ ref)" خلف = "$ (git rev-list --count $ ref..origin / HEAD)" printf "٪ s تم إنجاز٪ d٪ d \ n "" $ ref "" $ يتقدم "" $ متأخرًا "| عمود -t tb / cruft-extra-tips 2 96 تيرابايت / لكل مرجع — استبعاد 16 96 تيرابايت / الصور النقطية الهادرة 47 3
  • تمت إضافة خيار "--porcelain" إلى الأمر "git fetch" ، والذي يولد مخرجات بالتنسيق " "، أقل قابلية للقراءة ، ولكنه أكثر ملاءمة للتحليل في البرامج النصية.
  • تمت إضافة إعداد "fetch.hideRefs" لتسريع عمليات "git fetch" عن طريق إخفاء جزء من الروابط في المستودع المحلي في مرحلة التحقق مما إذا كان الخادم قد أرسل المجموعة الكاملة من الكائنات ، مما يوفر الوقت عن طريق قصر الفحص على الخوادم فقط التي يتم استرداد البيانات منها مباشرة. على سبيل المثال ، عند الاختبار على نظام به مستودعات تحتوي على عدد كبير من الروابط الخارجية المتعقبة ، أدى استبعاد جميع الروابط باستثناء تلك الموجهة إلى خادم الهدف البعيد $ إلى تقليل عملية "git fetch" من 20 دقيقة إلى 30 ثانية. $ git -c fetch.hideRefs = refs -c fetch.hideRefs =! refs / remotes / $ remote \ fetch $ remote
  • يقوم الأمر "git fsck" بتنفيذ القدرة على التحقق من وجود تلف ومطابقة المجموع الاختباري وصحة القيم في الصور النقطية لإمكانية الوصول والفهارس العكسية.
  • يعرض الأمر "git clone --local" الآن خطأً عند محاولة النسخ من مستودع يحتوي على روابط رمزية داخل $ GIT_DIR.

المصدر: opennet.ru

إضافة تعليق