Могу ли я обновить ветку из транка без слияния?

Я, вероятно, просто не подумал об этом, или, возможно, я просто не знаю об уже существующей опции в Subversion (я, конечно, не эксперт).

Мне просто интересно, создал ли я ветку, чтобы начать работу над какой-то новой функцией, есть ли более простой способ поддерживать ветку в актуальном состоянии с помощью самых последних версий trunk, не имея пройти через все проблемы слияния ряда ревизий. Я хотел бы иметь возможность просто обновлять и получать все ревизии из ствола (и ветки, конечно), в то время как мои зафиксированные изменения влияют только на ветку. Это возможно? Имеет ли смысл то, что я прошу?

Я полагаю, что на самом деле это не обязательно отличается от слияния ряда ревизий; просто я использую AnkhSVN, который выполняет все эти передовые проверки, прежде чем разрешить слияние, и иногда мне кажется, что это намного сложнее, чем должно быть. Идея состоит в том, что я хочу поддерживать свою ветку в актуальном состоянии с учетом любых коммитов, которые другие разработчики могут вносить в магистраль, чтобы, когда я в конечном итоге сделаю слияние своей ветки с магистралью, все прошло (как ) плавно (по возможности).


person Dan Tao    schedule 03.03.2010    source источник


Ответы (5)


Своевременное обновление вашей ветки с помощью последних проверок ствола называется слиянием.

Я знаю, что иногда слияние может быть королевским кошмаром, но именно это и есть слияние.

person Jack Marchetti    schedule 03.03.2010
comment
@ Джек: Я подозревал, что это будет общий ответ. Возможно, тогда мне следовало спросить, почему слияние намного сложнее, чем простое обновление? - person Dan Tao; 03.03.2010
comment
Потому что слияние должно иметь дело с конфликтующими изменениями? - person sbi; 03.03.2010
comment
@sbi: Хотя, возможно, и обновление. - person Dan Tao; 03.03.2010
comment
Наличие ствола и ответвления означает наличие двух линий развития. Думайте об этом как о двух путях к корню в дереве. Если вы хотите получить изменения из другой строки, это не может быть слишком просто, верно :)? - person pajton; 03.03.2010
comment
@Dan - Думаю, в SVN может быть так сложно. Я вспоминаю, как слушал подкаст stackoverflow, где Джоэл / Джефф говорили о том, насколько это может быть болезненно. Я не уверен, что другие системы контроля версий делают это лучше. - person Jack Marchetti; 03.03.2010
comment
@pajton: Я понимаю, что это должно быть сложнее, чем простое ванильное обновление из той же ветки / ствола. Но концептуально я как бы думаю, что ствол идет перед ветвью или, в любом случае, иерархически опережает ветку. Так что мне бы понравилось, если бы я мог продолжать получать обновления со всех уровней до своего - чтобы я мог, например, разветвляться от ветки и продолжать получать все обновления из магистрали , а также родительская ветвь. Но, похоже, это просто несбыточная мечта ... - person Dan Tao; 03.03.2010
comment
@ Джек: Похоже, ты прав. После проверки ссылки, предоставленной Майклом Хакнером, я думаю, что получил лучшее представление о проблемах, связанных с обновлением ветки через систему, основанную на исправлениях. - person Dan Tao; 03.03.2010
comment
@Dan: Да, обновление тоже делает то же самое, и это тоже иногда бывает больно. Однако ветви часто создаются, потому что заранее известно, что конфликтующие правки будут иметь место в течение более длительного периода времени, поэтому более вероятно, что вы столкнетесь с конфликтами. (И не забывайте о тех случаях, когда вы объединяете две ветки с конфликтующими изменениями в рабочую копию с большим количеством локальных изменений. Это весело ...) - person sbi; 03.03.2010
comment
Несколько дополнений к этому: если вы выбираете диапазон ревизий, но не используете средство просмотра истории для выбора того, что вы хотите объединить, все ревизии объединяются. Это контролируется на шаге мастера сразу после того, как вы выбираете «Диапазон редакций». Если вы убедитесь, что у вас нет незавершенных изменений, и вся рабочая копия находится в одной ревизии (обновите на уровне решения перед началом слияния). AnkhSVN предупредит вас, если это не так. - person Sander Rijken; 04.03.2010
comment
@Jack - многие люди утверждают, что Mercurial и Git делают слияние менее болезненным. У меня нет опыта работы с ними, но я планирую попробовать Mercurial в какой-то момент. - person Tom Bushell; 17.08.2011
comment
Это одна из ситуаций, которые, как мне кажется, GIT поддерживает лучше. Но на самом деле не так уж больно просто слить из ствола, и вам поможет множество инструментов, я лично использую Cornerstone, и у него есть функция синхронизации, которая предназначена для слияния изменений ствола в ветку. - person LightningStryk; 11.07.2013

TL; DR; Нет, вы должны объединиться, вот несколько инструкций

Это не так плохо, как вы думаете. Я опишу шаги из командной строки, которую я использую. Я буду использовать vimidiff для управления конфликтами, вы можете использовать Meld или другой инструмент diff, который вам нравится. Командам предшествует знак решетки '#'.

<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. Команда слияния будет выглядеть так:

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

Все остальные шаги такие же.

person flaxeater    schedule 03.03.2010

Идея состоит в том, что я хочу поддерживать свою ветку в актуальном состоянии с учетом любых коммитов, которые другие разработчики могут вносить в магистраль, чтобы, когда я в конечном итоге объединю свою ветку в магистраль, все шло (как) гладко (насколько это возможно).

Для этого вам нужно выполнить слияние ревизий диапазона из ствола. На самом деле, рекомендуется время от времени выполнять такое слияние с веткой, чтобы быть в курсе того, что происходит в стволе.

Я не знаю об инструментах для AnkhSVN, но «чистый» SVN имеет очень хорошие инструменты, которые делают операции слияния довольно простыми. TortoiseSVN - отличный инструмент для Windows, и если вам нравится Netbeans также есть очень хорошая графическая поддержка слияния.

person pajton    schedule 03.03.2010

Я не знаком с AnkhSVN, но то, что вы описываете, - это именно то, для чего svn merge. Так что ответ на ваш вопрос отрицательный.

Однако вы можете проверить вариант --reintegrate, чтобы узнать, облегчит ли это вашу жизнь.

См. Эти сообщения в блоге:

Повторная интеграция слияния Subversion
В двух словах об отслеживании слияний в Subversion 1.5

person Michael Hackner    schedule 03.03.2010
comment
Первая часть этого ответа хороша, но параметр --reintegrate используется при слиянии ветки обратно в магистраль, поэтому на самом деле она не применима к вопросу. - person ChrisH; 03.03.2010
comment
@ChrisH Он специально упомянул слияние с основной веткой как последний шаг в процессе, поэтому я включил его для полноты. - person Michael Hackner; 03.03.2010
comment
Справедливо. Я просто подумал, что здесь можно прояснить ситуацию, потому что использование --reintegrate при переходе от магистрали к ветке вызовет проблемы. Оглядываясь назад, я должен был сформулировать свой первый комментарий как пояснение. - person ChrisH; 03.03.2010

Если вы используете PHPStorm, вы можете попробовать использовать графический интерфейс https://www.jetbrains.com/help/idea/2016.1/integrating-changes-to-from-feature-branches.html

person max4ever    schedule 31.05.2016