سؤال

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

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

بمعنى آخر، أود أن أسمع من الأشخاص الذين يستخدمون البازار (أو DVCS آخر) في الحياة الواقعية، أو من الأشخاص الذين يعرفون كيفية عمله.هل الدمج أفضل حقًا؟وكيف يتم تحقيقه؟


سؤال ذو صلة، مع إجابة مفيدة:

لماذا يكون التفرع والاندماج أسهل في Mercurial منه في Subversion؟

هل كانت مفيدة؟

المحلول

الدمج ليس أفضل بشكل جوهري في DVCS، كل ما في الأمر هو أنه سيكون من الصعب جدًا استخدامه من الناحية العملية إذا لم يعمل التفرع/الدمج بشكل صحيح (يمكن القول إن svn لا ينفذ التفرع/الدمج بشكل صحيح)، لأنه بدلاً من إجراء الخروج، أنت إنشاء فرع جديد في كل مرة تبدأ فيها العمل على مشروع من كود موجود.أعتقد أن بعض أنظمة SCS المركزية المملوكة تتعامل مع الدمج/الفرع بشكل صحيح.

الطريقة التي تعمل بها جميعًا هي تسجيل كل التزام في الرسم البياني المباشر غير الدوري (DAG)، ومن هذا، لديك استراتيجيات دمج مختلفة متاحة.هنا يمكنك العثور على مزيد من المعلومات:

http://revctrl.org/CategoryMergeAlgorithm

على الأقل يمكن لـ hg وbzr وgit استخدام أدوات الدمج الخارجية.

نصائح أخرى

يحقق DVCS عمليات دمج أفضل من خلال تتبع المراجعات الأصلية لعمليات الدمج.في Subversion، عندما تقوم بدمج فرع في آخر، فإنك تفقد معلومات حول المكان الذي نشأ منه الدمج.في DVCS مثل Bazaar أو Git، تنتهي المراجعة "المدمجة" بمراجعتين أصليتين.

يتم التعامل مع إعادة التسمية بشكل مختلف بين DVCS.Git، على سبيل المثال، لا يتتبع عملية إعادة التسمية على الإطلاق لأنها لم تكن مهمة بالنسبة إلى Linus.يسجلها Mercurial على أنها "نسخ الملف القديم إلى الملف الجديد، وحذف الملف القديم". وفقا لمارك شاتلوورث, ، مؤسس Canonical، وDarcs وBazaar هما DVCS الوحيدان اللذان يتعاملان مع إعادة تسمية الملفات بشكل صحيح.

كيف يعرف البازار أنني قمت بإعادة تسمية ملف؟

يتم تحديد عمليات إعادة التسمية من قبل المستخدم، تمامًا مثل إضافة الملفات أو إزالتها.استخدم ال "bzr rename <old> <new>"أمر لوضع علامة على الملفات أو الدلائل لإعادة التسمية.إذا قمت بالفعل بإعادة تسمية ملف في الشجرة، فيمكنك استخدام "--after" خيار.

ماذا لو قمت بإعادة تسمية ملفين كجزء من نفس الالتزام؟

ثم تكتب "bzr rename <old> <new>"مرة واحدة لكل ملف.لا يحاول Bazaar تخمين الملفات التي تمت إعادة تسميتها.

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

ثم تكتب "bzr add" في الملف الجديد، نظرًا لأنك لا تقوم بإعادة تسميته فعليًا.

فيما يلي مناقشة لكيفية قيام داركس (http://darcs.net) يتعامل مع التصحيحات - http://darcs.net/manual/node9.html.

لست على دراية بـ bazaar، لكن git لا يتتبع إعادة تسمية الملفات.بالنسبة إلى git، يبدو هذا مثل الحذف والإضافة.ومع ذلك، فإن git يتمتع بالذكاء الكافي ليرى أن محتويات الملف موجودة بالفعل في مستودعه وسيقوم بتتبع موضعها في النظام.إذا قمت بتقسيم الملفات أو دمجها، فسيكون ذلك ذكيًا بما يكفي لتتبع أجزاء من التعليمات البرمجية (blobs) وتخزين تلك المعلومات أيضًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top