Свн слияние и автоматическое разрешение конфликтов

Я новичок в 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 ответа

  1. При слиянии от магистрали к ветке (в WC филиала) порядок параметров в mergeinfo неверный (обратный): сокращенная правильная форма должна быть svn mergeinfo --show-revs eligible trunk (первый параметр - ИСТОЧНИК слияния, второй - TARGET /default "."/, т.е. ваш WC)
  2. Если вы используете Subversion, которая уже поддерживает mergeinfo, вы можете пропустить обнаружение диапазона "должны быть объединены" ревизий - Subversion делает это автоматически при слиянии
  3. Если вы хотите, чтобы в случае конфликта всегда предпочитали изменения из транка, вы можете добавить его в команду слияния

В итоге ваш периодический процесс синхронизации-слияния будет одной командой внутри WC ветви

svn merge <URL-OF-TRUNK> --accept "theirs-conflict"

Обычно объединение должно быть намного проще - особенно если вы объединяетесь только из магистрали в ветвь. В этом случае просто убедитесь, что

A) у вас нет незафиксированных изменений в вашей рабочей копии филиала, и B) что у вас есть текущая версия ветви (которую вы уже делали, выполнив команду 'svn up')

Если вы готовы объединиться, просто выполните

svn merge ^/trunk 

в вашей ветке рабочая копия.

Что касается конфликтов: иногда svn запускает diff слияния и сообщает о конфликтах там, где их нет. Хороший трехсторонний инструмент слияния, такой как kdiff3, может творить чудеса. Кроме того, я рекомендую НЕ использовать автоматическое разрешение конфликтов, так как большинство конфликтов не будет легче решить, просто избегая их разрешения. Используя описанный выше процесс, вы должны хотя бы избежать всех ненужных конфликтов.

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