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

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

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

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

5 ответов

Решение

Поддержание вашей ветки в курсе последних проверок транка называется слиянием.

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

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

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

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

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

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

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

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

Я не знаком с АнхСВН, но то, что вы описываете, это именно то, что svn merge для. Так что ответ на ваш вопрос - нет.

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

Смотрите эти сообщения в блоге:

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

Другие вопросы по тегам