SVN слияние ствола с веткой: все пути дерева конфликтов - PullRequest
3 голосов
/ 21 апреля 2011

Кажется, я не могу создать ветку, а затем объединить изменения в ствол:

svn copy file:///svn/project/trunk file:///svn/project/branches/feature-branch
svn co file:///svn/project/branches/feature-branch
cd feature-branch
#change a couple of files, no additions/deletions
svn commit
svn merge file:///svn/project/trunk

При этом каждый отдельный путь в ветви указывается как конфликт дерева (статус svn показывает «локальное добавление, входящее добавление при слиянии»). В слиянии есть список того, что он объединяется с r2 и далее на транке ... так что похоже, что svn copy на самом деле не хранит историю того, как ветка отошла от транка? Это рабочий процесс, перечисленный в книге о Subversion для 1.5. Является ли 1.6 совершенно другим рабочим процессом? (С использованием 1.6.11)

Edit: svn log -v показывает:

A /branches/feature_branch (from /trunk:3091)

svn proplist пуст. (возможно, из-за того, что я не разрешил конфликты деревьев?) Изменения в ветви функций также не отображаются в журнале, а r3091 отсутствует в svn log -v. Сообщение о слиянии «Слияние r2 - r3093 в». Похоже, проблема в том, чтобы запомнить, где находится форк. После удаления и повторного создания ветки мы перестали использовать svn ветки.

Ответы [ 3 ]

3 голосов
/ 11 августа 2011

У меня была такая же проблема. Проведя много исследований, я обнаружил, что на серверах SVN до 1.5 в ветвях не будет информации о слиянии, хранящейся на серверах. Таким образом, всякий раз, когда вы пытаетесь выполнить слияние в своей ветке, она будет пытаться синхронизироваться от ревизии 1 до HEAD. Поскольку в вашей ветке, вероятно, есть новые файлы, которых не было в trunk r1, у вас будет много конфликтов деревьев. Есть два решения: использовать диапазон ревизий в команде слияния (svn merge -r 1234: HEAD http://trunk) или обновить сервер SVN до версии, большей или равной 1,5, в которой он хранит информацию о слияниях, поэтому всякий раз, когда вы попробуйте выполнить слияние в вашей ветке, она узнает, какая последняя ревизия была синхронизирована, и выполнит слияние только из этой.

0 голосов
/ 23 декабря 2012

При слиянии убедитесь, что вы зафиксировали корневой каталог. В свойствах этого каталога у вас есть номер ревизии, который был слит, и если вы его не зафиксируете, у вас будет конфликт при следующем слиянии.

0 голосов
/ 21 апреля 2011

Я ожидаю, что это будет работать нормально (по крайней мере, для меня, используя v1.6.13.19776).Если это тестовое репо, можете ли вы опубликовать вывод из ветви функций:

svn log -v

Должна быть запись для копирования, например:

D:\svntest\feature-branch>svn log -v
------------------------------------------------------------------------
r6 | XXXX | 2011-04-21 08:04:21 +0100 (Thu, 21 Apr 2011) | 1 line
Changed paths:
   A /project/branches/feature-branch (from /project/trunk:5)

test branch
------------------------------------------------------------------------

Какойпоказывает, что отслеживается «ветвь функции», создаваемая из «ствола».

Стоит также проверить выходные данные из:

svn proplist

Я ожидаю, что перед вами это будет пусто 'мы пытались выполнить слияние со ствола, однако впоследствии (при условии, что оно работало правильно) у вас должно быть свойство mergeinfo:

D:\svntest\feature-branch>svn proplist
Properties on '.':
   svn:mergeinfo

, к которому вы затем можете обратиться:

svn propget svn:mergeinfo

Опятьесли все работает правильно, это должно быть обновлено, чтобы указать «стволовые» ревизии, которые были добавлены в ветку, что-то вроде:

D:\svntest\feature-branch>svn propget svn:mergeinfo
/project/trunk:6-7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...