Subversion: объединить, вернуться, снова объединить. Почему он молча терпит неудачу? - PullRequest
17 голосов
/ 29 сентября 2010

Это неприятная ошибка Subversion или я подхожу к ней неправильно?

Слить ветку в ствол. -> HelloWorld.txt обновляет

Вернуть HelloWorld.txt

Сделайте то же самое снова. -> Нет обновлений файлов.

Почему второе слияние не обновляет HelloWorld снова? Он действует так, как будто это изменение уже скопировано. Не следует ли вернуть его обратно?

Если вы вернете всю папку, в которой находится HelloWorld, второе слияние правильно применит изменения снова. Только если вы вернете файл, он не сможет.

Это немного страшно. Что делать, если мне нужно вернуть некоторые файлы сейчас. Любое слияние в будущем не сможет скопировать критический код.

Subversion 1.6 OS X 10.6.4

Ответы [ 3 ]

21 голосов
/ 24 февраля 2011

Этот комплект описан в документации SVN Расширенное слияние (см. Примечание 23). Когда вы впервые объединяете свое изменение, объединенный номер редакции отслеживается в свойстве svn:mergeinfo. Если вы отменяете свои изменения, ревизия по-прежнему помечается как объединенная, чтобы предотвратить повторное слияние по ошибке. Дело в том, что если вы удалите его, у вас будет мало шансов вернуть его ...

Если, однако, вы действительно хотите объединить его снова, вы можете использовать опцию --ignore-ancestry, которая не будет проверять svn:mergeinfo, была ли ревизия ранее объединена. Другое решение заключается в намеренном удалении этой ревизии из svn:mergeinfo, чтобы в будущем ее можно было снова объединить. Но не делайте этого вручную, для этого используйте параметр --record-only команды svn merge.

7 голосов
/ 30 сентября 2010

Subversion выполняет отслеживание слияния, то есть оно будет записывать, какие ревизии уже были объединены.Информация о слиянии записывается в свойстве с именем svn:mergeinfo в корне слияния (т. Е. Все, что вы указали в качестве цели после svn merge).Вы вернули файл, но, вероятно, не вернули корень слияния, содержащий измененное или добавленное свойство svn:mergeinfo.

4 голосов
/ 30 сентября 2010

Сандерс прав.

Не думайте, будто вы копируете состояния.Вы «берете» изменения и применяете их снова к другой цели (которая в идеале является относительной к источнику слияния).

До версии 1.5 мы должны были отслеживать изменения вручную при слиянии."Хм, я слил r28445 в r28501 из этой ветки? Я не хочу повторно применять изменения, которые я уже сделал: - /"

Это была головная боль;)

svn, поскольку 1.5 сохраняетотслеживать то, что вы делали в прошлом и только один раз примените историческое изменение к уникальному месту назначения.

Вы можете отключить эту дружественную проверку, используя "--ignore-ancestry""в вашей команде svn merge.Будьте готовы получить МНОГО изменений в том, что вы уже подали заявку.Сузьте, что вы хотите получить, указав ревизию.

svn merge --ignore-ancestry -c REVISION_WITH_CHANGE http://mysvn/path/to/mergeorigin
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...