سؤال

عندما يتم إعادة دمج فرع في الجذع، هل هذا الفرع ميت فعليًا؟

هل يمكنك إجراء تعديلات على الفرع بعد إعادة الدمج ودمجها مرة أخرى في صندوق السيارة في وقت لاحق؟

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

المحلول

يمكنك القيام بذلك من الناحية الفنية، فرعك ليس ميتًا أو معطلاً، ولكن لا يوصى بالدمج من فرع إلى صندوق السيارة بعد إعادة الدمج.

يمكنك العثور على مناقشة كاملة حول سبب ذلك هنا: التخريب دمج إعادة التكامل

في الأساس، تقول أنه من الممكن دمج تغييراتك مرة أخرى في الجذع، ولكن بما أن إعادة الدمج تجبرك على الدمج من الجذع إلى الفرع قبل عملية إعادة الدمج، فسوف تواجه دمجًا عاكسًا/دوريًا وهو أمر يمثل مشكلة كبيرة في Subversion 1.5 .
وفقًا للمقال، يوصى بحذف الفرع المعاد دمجه فورًا بعد إعادة الدمج وإنشاء فرع جديد يحمل نفس الاسم (أو مختلفًا) بدلاً من ذلك.

هذا هو سلوك التخريب المعروف الذي سيتم تناوله في الإصدار المستقبلي (ربما في 1.6)


نصائح أخرى

في الواقع، عليك أن تفعل --record-only قم بالدمج من صندوق السيارة إلى فرع المراجعة الخاص بك الذي تم إنشاؤه بواسطة --reintegrate يقترف:

$ cd trunk
$ svn merge --reintegrate ^my-branch 
$ svn commit

Committed revision 555. 
# This revision is ^^^^ important

والآن قمت بتسجيله

$ cd my-branch
$ svn merge --record-only -c 555 ^trunk 
$ svn commit

أنت سعيد للحفاظ على الفرع الآن

مزيد من المعلومات في الفصل 4.التفريع والدمج، الدمج المتقدم.

بعد إعادة دمج الفرع في الجذع، يجب عليك القيام بأحد أمرين:

  • احذف فرعك.هذا هو الأسهل، لكنه يجعل من الصعب رؤية تاريخ الفرع.

  • أخبر فرعك بعدم دمج التزام إعادة التكامل.إذا قمت بإعادة التكامل إلى الجذع، وقمت بتنفيذه كمراجعة X، فيمكنك تشغيل هذا الأمر على فرعك: svn merge --record-only -c X url-to-trunk.ومع ذلك، لا ينبغي عليك القيام بذلك إذا قمت بإجراء أي تغييرات كجزء من الالتزام، بخلاف الدمج نفسه.أي تغييرات أخرى لن تعود إلى فرعك أبدًا.

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

مثال:

لديك تخطيط مستودع مثل هذا:

/your_project
  /trunk
  /branches
  /tags

لنفترض أنه تطبيق ويب، وأنك خططت لإصداره.يمكنك إنشاء علامة، ومنها (أو من صندوق السيارة) فرعًا يمكنك من خلاله إجراء إصلاحات الأخطاء:

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0

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

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

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2

يمكنك الآن فقط دمج التغييرات بين 1.0.0 و1.0.2 في صندوق السيارة الخاص بك (على افتراض أنك في نسخة العمل الخاصة بك):

svn merge http://rep/your_project/tag/1.0.0 http://rep/your_project/tag/1.0.2 .

هذا ما يجب أن تتذكره.لقد قمت بالفعل بدمج التغييرات بين 1.0.0 و1.0.2 على صندوق السيارة.لنفترض أن هناك المزيد من التغييرات في إصدار الإنتاج الحالي:

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2
    /1.0.3
    /1.0.4

أنت الآن جاهز لإصدار الإصدار الجديد من صندوق السيارة، ولكن التغييرات الأخيرة الخاصة بإصلاحات الأخطاء لا تزال مفقودة:

svn merge http://rep/your_project/tag/1.0.2 http://rep/your_project/tag/1.0.4 .

الآن لديك الجميع تم دمج التغييرات في صندوق السيارة الخاص بك، ويمكنك إصدار الإصدار الخاص بك (لا تنس اختباره أولاً).

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
    /1.1.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2
    /1.0.3
    /1.0.4
    /1.1.0

وكما قال الجميع هنا بالفعل:الفرع لم يمت ويمكن أن يستمر الالتزام بالفرع على ما يرام.

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

لا، الفرع لا يزال حيًا، لكنه في تلك اللحظة هو تمامًا مثل الجذع.إذا واصلت التطوير على الفرع، فلديك الحرية في إعادة الدمج مع الصندوق لاحقًا.

يمكنك الدمج من فرع إلى جذع، أو من جذع إلى فرع، عدة مرات كما تريد.

أولاً، يجب عليك ترقية عميل وخادم Subversion إذا كنت لا تزال تستخدم Subversion 1.7 أو أقدم.لا يوجد سبب لاستخدام إصدارات Subversion القديمة جدًا.اعتبارًا من عام 2016، الإصدار الحالي هو Subversion 1.9.SVN 1.8 مدعوم أيضًا الآن ولا يزال يتلقى إصلاحات للأخطاء.

تم حل المشكلة التي تسأل عنها في Subversion 1.8.بدءًا من SVN 1.8، --reintegrate لقد كان الخيار إهمال.يتم الآن تنفيذ عمليات الدمج لإعادة التكامل تلقائيا.يرى Subversion 1.8 إدخال ملاحظات الإصدار المتعلق بالتحسين.

يقرأ Svnbook 1.8 | إعادة دمج فرع:

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

...

يدعم Subversion 1.8 فقط إعادة الاستخدام لفرع الميزات.تتطلب الإصدارات السابقة بعض المعالجة الخاصة قبل إعادة دمج فرع الميزة أكثر من مرة.انظر الإصدار السابق من هذا الفصل لمزيد من المعلومات: http://svnbook.red-bean.com/en/1.7/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.reintegrate

عندما تقوم بالدمج، فإنك تحدد الهدف.يمكنك دمج الاختلافات بين TreeA وTreeB في TreeC إذا أردت.كما يشير كريس، سؤالك ليس له معنى كبير حقًا.إذا قمت بدمج الفرع الخاص بك في الجذع، يبقى الفرع دون تغيير.إذا لم تكن هناك حاجة إلى الفرع بعد ذلك، فيمكنك حذفه.

يمكنك الاستمرار في التطوير على الفرع، الميزة التي ستحتاجها هي تتبع الدمج وهو موجود في Subversion 1.5، وهذا يعني أن عمليات الدمج الإضافية من الفرع تتضمن فقط التغييرات الجديدة.

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