SVN объединить просто добавить каталог из регистрации (без содержимого каталога) - PullRequest
2 голосов
/ 20 января 2010

Пытаюсь объединить (из ветви) файл в каталог, который еще не существует в транке.Вот пример:

Магистраль (из которой мы разветвляемся)

/
/root1.txt
/foo/foo1.txt

Ветвь (после 2 проверок)

/
/root1.txt
/foo/foo1.txt
/bar/bar1.txt
/bar/bar2.txt

Первая регистрация:

A  /bar
A  /bar/bar1.txt

Вторая регистрация:

A  /bar/bar2.txt

Если ствол не изменился, возможно ли получить only /bar/bar2.txt вхобот?Вот решения, которые я уже пробовал:

svn merge -rX:X+1 /path/to/branch/bar .  --> nothing gets merged here
svn merge -rX+1:X+2 /path/to/branch/bar .  --> pulls bar2.txt into the trunk but not within bar directory
svn merge -rX:X+1 /path/to/branch .      --> pulls both directory and bar1.txt into trunk

svn copy /path/to/branch/bar .           --> recursively copies directory bar into trunk

mkdir /path/to/trunk/bar
svn add bar
svn merge -rX+1:X+2 /path/to/branch/bar bar/

Окончательное решение здесь вид работает.Это позволяет мне только вставить bar2.txt в транк и продолжить, но когда я пытаюсь позже реинтегрировать мою ветку обратно в транк, вы получаете конфликт дерева в каталоге (каталог добавляется в обоих местах -> 'локальное добавление, входящийдобавить после слияния ').

Я понимаю, что если бы моя команда провела более точные проверки зерна - то есть добавила каталог в одном коммите и файлы в другом - тогда я могла бы слить, как я пытаюсь выше.Это единственное решение?

  1. Похоже, что SVN позволяет объединять отдельные файлы из ветви в ствол, поэтому возможно ли это с отдельными каталогами (не рекурсивно)?
  2. В частичном решении, которое я нашелвыше, могу ли я пометить каталог в ветви как слитый с транком независимо от других файлов, которые были одновременно зарегистрированы, чтобы я не получил конфликт дерева?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 20 января 2010

Попробуйте это:

svn merge http://url/to/trunk/bar http://url/to/branch/bar bar/

Это проще, если вы думаете, что все команды слияния просто применяют diff.Сравните выходные данные svn help merge с svn help diff - они очень похожи.После того, как вы выяснили команду svn diff, которая будет производить именно тот набор изменений, который вам нужен, примените его к правильному каталогу, и вы настроены!

Итак, в вашем случае вам нужна разница между bar/ на транке и баре / на ветке, применяется к локальной (транковой) версии бара.

Редактировать : и в случае, когда бара / еще не существует в транке, aПростая операция копирования SVN сделает свое дело:

svn copy http://url/to/branch/bar http://url/to/trunk/bar -m'merging new directory bar/'

(Обратите внимание, что целью является сам репозиторий SVN, а не рабочая копия.)

0 голосов
/ 20 января 2010

Проблема в том, что вы зафиксировали A bar в той же ревизии, что и A bar/bar1.txt.

. Я вернусь к ней до двух коммитов.Затем зафиксируйте A bar отдельно, затем A bar/bar1.txt, затем A bar/bar2.txt.После этого вы сможете объединить нужные отдельные ревизии со стволом.

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

Mergeinfo, точнее, версионное свойство svn: mergeinfo, - это история слияний, сделанных в данный файл или каталог.В этой статье подробно рассматривается mergeinfo;что это значит и как это работает.

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