Свн слияние и автоматическое разрешение конфликтов
Я новичок в SVN и мне нужно сделать много слияния от ствола к ветви, с которой мы работаем. Это последовательность команд SVN, которые я беру, чтобы объединить
svn up
svn mergeinfo --show-revs eligible branch trunk (branch and trunk are actually svn urls)
Я получаю наименьшую ревизию из допустимых ревизий из ветви и самую последнюю ревизию транка, затем выполняю svn-слияние.
svn merge -r lowest_eligible:latest_trunk trunk_url .
Во время слияния происходит несколько конфликтов. Однако они не связаны с какими-либо изменениями, которые мы внесли в ветку, поэтому я немного запутался, почему они являются конфликтами. Есть идеи? Во всяком случае, я всегда просто выбираю, их полно, чтобы решить это
Наконец, мне нужно сделать SVN решить, прежде чем совершать
svn resolve --accept working -R .
У меня два вопроса. Это лучшая последовательность команд для объединения из магистрали в ветку?
Слияние имеет тенденцию занимать некоторое время, поэтому я хотел бы просто оставить это слияние и позволить svn автоматически разрешить конфликт до их полного. Есть ли способ сделать это?
2 ответа
- При слиянии от магистрали к ветке (в WC филиала) порядок параметров в mergeinfo неверный (обратный): сокращенная правильная форма должна быть
svn mergeinfo --show-revs eligible trunk
(первый параметр - ИСТОЧНИК слияния, второй - TARGET /default "."/, т.е. ваш WC) - Если вы используете Subversion, которая уже поддерживает mergeinfo, вы можете пропустить обнаружение диапазона "должны быть объединены" ревизий - Subversion делает это автоматически при слиянии
- Если вы хотите, чтобы в случае конфликта всегда предпочитали изменения из транка, вы можете добавить его в команду слияния
В итоге ваш периодический процесс синхронизации-слияния будет одной командой внутри WC ветви
svn merge <URL-OF-TRUNK> --accept "theirs-conflict"
Обычно объединение должно быть намного проще - особенно если вы объединяетесь только из магистрали в ветвь. В этом случае просто убедитесь, что
A) у вас нет незафиксированных изменений в вашей рабочей копии филиала, и B) что у вас есть текущая версия ветви (которую вы уже делали, выполнив команду 'svn up')
Если вы готовы объединиться, просто выполните
svn merge ^/trunk
в вашей ветке рабочая копия.
Что касается конфликтов: иногда svn запускает diff слияния и сообщает о конфликтах там, где их нет. Хороший трехсторонний инструмент слияния, такой как kdiff3, может творить чудеса. Кроме того, я рекомендую НЕ использовать автоматическое разрешение конфликтов, так как большинство конфликтов не будет легче решить, просто избегая их разрешения. Используя описанный выше процесс, вы должны хотя бы избежать всех ненужных конфликтов.