Почему svn слияние ветки без изменений приводит к тому, что нетронутые файлы изменяют свойство svn: mergeinfo - PullRequest
10 голосов
/ 12 января 2010

Я создал ветку с именем "feature3" из моего ствола. Я делаю ноль модификаций для файлов в ветке "feature3". Также нет никаких изменений в файлах на стволе. Используя TortoiseCVS (TortoiseSVN 1.6.6, сборка 17493 - 32-разрядная версия) против репозитория SVN (версия 1.6.3 (r38063)), я инициирую «Слияние» с выбранным параметром «Реинтегрировать ветку».

Вывод этой команды показывает объединение 80 файлов. В этих файлах изменено только свойство svn: mergeinfo. Но почему только эти 80 файлов? У меня есть сотни других файлов в проекте, у которых это свойство не изменилось.

Вот пример изменения свойства svn: mergeinfo для одного файла

До:

/ Trax / филиалы / текущие / Библиотеки / Безопасность / Технические характеристики / NotSpecification.cs: 10292-10783 /trax/branches/feature1/Libraries/Security/Specifications/NotSpecification.cs:11324 /trax/branches/feature2/Libraries/Security/Specifications/NotSpecification.cs:11326 /trax/branches/int/Libraries/Security/Specifications/NotSpecification.cs:11232-11314 /trax/branches/next/Libraries/Security/Specifications/NotSpecification.cs:10156-10782 /trax/branches/trax-1.0.x/Libraries/Security/Specifications/NotSpecification.cs:10191-10291 /trax/branches/upgrade/Libraries/Security/Specifications/NotSpecification.cs:9964-10604 /trax/tags/trax-1.0.0/Libraries/Security/Specifications/NotSpecification.cs:10178-10190 /trax/trunk/Libraries/Security/Specifications/NotSpecification.cs:6672-9851,11232-11325

После

/ Trax / филиалы / текущие / Библиотеки / Безопасность / Технические характеристики / NotSpecification.cs: 10292-10783 /trax/branches/feature1/Libraries/Security/Specifications/NotSpecification.cs:11324 /trax/branches/feature2/Libraries/Security/Specifications/NotSpecification.cs:11326 /trax/branches/feature3/Libraries/Security/Specifications/NotSpecification.cs:11328-11334 /trax/branches/int/Libraries/Security/Specifications/NotSpecification.cs:11232-11314 /trax/branches/next/Libraries/Security/Specifications/NotSpecification.cs:10156-10782 /trax/branches/trax-1.0.x/Libraries/Security/Specifications/NotSpecification.cs:10191-10291 /trax/branches/upgrade/Libraries/Security/Specifications/NotSpecification.cs:9964-10604 /trax/tags/trax-1.0.0/Libraries/Security/Specifications/NotSpecification.cs:10178-10190 /trax/trunk/Libraries/Security/Specifications/NotSpecification.cs:6672-9851,11324-11327

Изменения в том, что эта строка была добавлена ​​

/ Trax / филиалы / feature3 / Библиотеки / Безопасность / Технические характеристики / NotSpecification.cs: 11328-11334

и последняя строка была изменена

/ Trax / багажник / Библиотеки / Безопасность / Технические характеристики / NotSpecification.cs: 6672-9851,11324-11327

Я ожидал, что объединение приведет к слиянию нулевых файлов. Почему SVN считает, что эти файлы необходимо объединить, а их свойство svn: mergeinfo изменилось? Есть ли способ исправить это?

Это тот случай, когда мне следует удалить свойства svn: mergeinfo для всех 80 файлов? Я имею в виду здесь и здесь .

Этот тривиальный пример является частью более крупного исследования, в котором я создаю ветвь объекта, делаю несколько изменений, а затем пытаюсь объединить изменения обратно в ствол. Однако слияние информирует меня о нескольких конфликтах деревьев в этих же 80 файлах. Все это очень расстраивает, что я не могу использовать ветвление SVN из-за всех этих конфликтов деревьев.

Ответы [ 2 ]

12 голосов
/ 13 января 2010

Но почему только эти 80 файлов?

Эти файлы имеют свойство svn:mergeinfo; другие нет. Когда отдельные файлы и подпапки проекта имеют это, это называется "поддерево mergeinfo". Как только файл или папка имеют свойство "svn: mergeinfo", информация о слиянии будет обновляться при каждой операции слияния.

Если вы объединяетесь только в корне вашего проекта и используете последнюю версию клиента SVN, вы редко увидите поддерево mergeinfo. Только корневая папка веток проекта (например, /trunk, /branches/foo) должна иметь свойство svn:mergeinfo.

edit : Если вы просто удалите поддерево mergeinfo, тогда Subversion не будет знать, что произошло слияние. Как следствие, Subversion может попытаться объединить эти ревизии снова всякий раз, когда позволяет выбрать ревизии, которые могут быть автоматически объединены (например, когда вы делаете svn merge без указания параметров -r или -c). В худшем случае такая попытка слияния может привести к ложным конфликтам, что не является большой проблемой; просто разрешите их вручную.

update : Subversion 1.7 теперь обновляет mergeinfo только тогда, когда это необходимо. Из заметок о выпуске :

Слияния больше не записывают информацию слияния (описывающую слияние) на поддеревьях (которые имеют свою явную информацию слияния), если на поддерево не повлияло слияние. Это должно значительно уменьшить количество ложных изменений свойств svn: mergeinfo для пользователей, которые имеют большое количество поддеревьев с явным mergeinfo.

4 голосов
/ 12 января 2010

Откуда появилась эта Mergeinfo?

Вышеприведенное, вероятно, является лучшей отправной точкой для объяснения того, почему вы иногда получаете такой тип поведения mergeinfo. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *. На этом блоге хранится НЕОБХОДИМЫЙ опыт объединения

Хотя я не читал этот следующий пост, он также выглядит потенциально полезным для вас:

Subversion 1.6.0 и древовидные конфликты

...