سؤال

ربما لم أفكر في هذا الأمر ، أو ربما لا أدري ببساطة خيارًا موجودًا بالفعل في التخريب (أنا بالتأكيد لست خبيرًا).

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

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

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

المحلول

يسمى الحفاظ على فرعك للقيام بتاريخ مع أحدث تسجيلات تسجيلات جذع.

أعلم أن الدمج يمكن أن يكون كابوسًا ملكيًا في بعض الأحيان ، ولكن هذا هو بالضبط ما هو الدمج.

نصائح أخرى

TL ؛ DR ؛ لا يجب أن تندمج ، إليك بعض التعليمات

إنه ليس سيئًا كما تعتقد. سأوضح الخطوات من سطر الأوامر الذي أستخدمه. سوف أستخدم Vimidiff لإدارة الصراعات التي يمكنك استخدامها MELD أو بعض الأدوات المختلفة التي تريدها. تسبق الأوامر علامة التجزئة "#"

<in branch first time from copy>
# svn log --stop-on-copy | tail 
<read the revision that was the copy instruction in this case r229>
# cd ../../trunk
# svn up
<I make note of the latest rivision which is r334>
<now I go back to the branch>
# cd ../branches/branch 
# svn merge -r229:334 svn://url.to.svn.server/project/trunk
<a whole bunch of stuff happens>
< now I check for conflicts >
# svn status | grep ^C
<which outputs something like>
C       public/tools/Diagnostic.class.php
C       public/domain/Report_Setup_Parameter.class.php
C       public/modules/mReports.module.php
<I now revert all these and manually merge them>
# svn revert public/tools/Diagnostic.class.php
...
<revert done now manuall doinng the merge
# vimdiff public/tools/Diagnostic.class.php ../../trunk/public/tools/Diagnostic.class.php
...
<now all the changes are done>
# svn commit -m "Merging trunk into branch 'branch' r:229:334"
commited revision 335

تم ذلك ، إذا قمت بذلك ، فلا توجد تغييرات كثيرة. بعد الاندماج الأول ، تحتاج إلى استخدام المراجعة # من الاندماج الأخير. لذلك في وقت ما في المستقبل ، سيبحث الأمر في سجل SVN للعثور على متى كانت مراجعة آخر دمج ، في هذه الحالة 335. سيبدو أمر دمج مثل thuse

# svn merge -r335:370 svn://url.to.svn.server/project/trunk

جميع الخطوات الأخرى هي نفسها.

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

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

لا أعرف عن الأدوات الخاصة بـ Ankhsvn ، لكن "SVN Pure" لديها أدوات جيدة جدًا تجعل عمليات الدمج بسيطة للغاية. السلاحف هي أداة رائعة لنظام التشغيل Windows وإذا أردت Netbeans هناك دعم رسومي لطيف للغاية لدمج أيضًا.

لست على دراية بـ Ankhsvn ، لكن ما تصفه هو بالضبط ما svn merge هو ل. لذا الاجابة على سؤالك هي لا.

ومع ذلك ، يمكنك التحقق من --reintegrate خيار لمعرفة ما إذا كان هذا يجعل حياتك أسهل.

انظر منشورات المدونة هذه:

Subversion Merge Reintegrate
Subversion 1.5 دمج تتبع باختصار

إذا كنت تستخدم phpstorm ، يمكنك محاولة استخدام واجهة واجهة المستخدم الرسوميةhttps://www.jetbrains.com/help/idea/2016.1/integrating-thanges-to-from-feature-branches.html

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