Как избежать большого количества svn: mergeInfo при слиянии ствола с ветвью функции в SVN - PullRequest
6 голосов
/ 24 сентября 2010

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

Я пытался

  • Использование той же версии клиента, что и Repo (1.5.2)
  • Использование моей текущей версии клиента 1.6.10
  • Слияние диапазона ревизий, от начала ветки до головы

Я должен отметить, что я внимательно изучал документацию SVN, когда пытался это сделать. Поэтому никакие правила не должны быть нарушены (например, нет переключенных поддеревьев, чистая локальная копия и т. Д.)

Ответы [ 4 ]

8 голосов
/ 24 сентября 2010

В основном, для очистки репозитория вам нужно запустить следующее в вашей ветке интеграции, чтобы изменения отошли оттуда: -

C:> svn propdel svn: mergeinfo –R

т.е. вы делаете это в транке, чтобы будущие выпуски и функциональные ветви не были загрязнены.При объединении существующих веток вы можете игнорировать все изменения svn: merginfo, находящиеся ниже «корня слияния», так как они все равно будут унаследованы.

Некоторое время назад я написал блог по этой проблеме, который более подробно освещает это: -

Очистка svn: mergeinfo Помет http://chrisoldwood.blogspot.com/2010/03/cleaning-up-svnmergeinfo-droppings.html

6 голосов
/ 24 сентября 2010

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

Если вы хотите избежать этих постоянных изменений mergeinfo, вам придется "привести в порядок" существующие свойства mergeinfo в вашей ветке. Самый безопасный, но самый трудоемкий способ - запустить svn propget -R svn:mergeinfo в ветке, а затем изучить различия между mergeinfo для отдельных файлов и mergeinfo их родительского каталога. Вы можете обнаружить, что различия невелики, и что «svn merge» с небольшим количеством отдельных ревизий будет достаточно для запуска elgeinfo elision, в результате чего все отдельные свойства mergeinfo исчезнут.

Если вы уверены, что понимаете, как работает mergeinfo, вы также можете просто войти и вручную отредактировать или удалить информацию mergeinfo из поврежденных файлов.

1 голос
/ 24 сентября 2010

Если у вас есть такая mergeinfo для файлов, которые на самом деле не изменены, вы или кто-то другой выполняет слияние не из корня рабочей копии ... Единственное решение - удалить svn: mergeinfo из файлов, потому что единственное местоположение - в рабочей копии рут больше нигде. И еще один момент, вы должны обновить хранилище до 1.6.X ..

0 голосов
/ 09 марта 2015

Поскольку я не уверен в слепом удалении свойства svn:merge-info, я реализовал инструмент для анализа текущей ситуации с рабочей копией и удаления как можно большего количества ревизий слияния из не-root свойств слияния-информации.После дополнительных человеческих проверок и контролей изменения рабочей копии могут быть зафиксированы.

Вот оно: svn-clean-mergeinfo

Не стесняйтесь сообщать о любыхвопрос об использовании, чтобы улучшить его.

...