Можно ли обновить ветку из ствола без слияния? - PullRequest
33 голосов
/ 03 марта 2010

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

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

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

Ответы [ 5 ]

32 голосов
/ 03 марта 2010

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

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

23 голосов
/ 03 марта 2010

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

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

<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

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

3 голосов
/ 03 марта 2010

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

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

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

0 голосов
/ 31 мая 2016

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

0 голосов
/ 03 марта 2010

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

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

Смотрите эти записи в блоге:

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

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