SVN Merge ничего не объединяет для некоторых ревизий - PullRequest
17 голосов
/ 15 марта 2011

Мы используем Subversion и TortoiseSVN.Мы используем ствол для разработки и ветки для представления стабильных выпусков.Изменения (исправления ошибок), сделанные в ветви, впоследствии объединяются обратно в ствол.Мы не специалисты по Subversion, но в целом это хорошо работает для нас.

Недавно я слил кучу изменений из ветки в ствол, и я попал в одну ревизию, где слияние ничего не делает.

Command    Merging revisions 7233-7234 of .../branches/RB-7.2.0 into C:\Core, respecting ancestry
           C:\Core  
Finished!   

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

Я знаю, что можно заблокировать ревизии от слияния, пометив слияние как запись-только (ревизия помечена как объединенная, хотя это не так.) Так что единственное, о чем я могу думать, - это то, что эти ревизии как-то заблокированы.В транке файлы, которые должны быть объединены, по-видимому, не имеют ничего в свойстве mergeinfo, равно как и ни одна из их родительских папок.Но я не уверен, ожидаю ли я / где увидеть эту информацию.Кроме того, диалоговое окно «Показать журнал» в диалоговом окне слияния, кажется, показывает все ревизии, включая те, которые я уже успешно слил, независимо от того, выбран ли «включить слитые ревизии».

Так что мои вопросыследует:

  • Есть ли способ подтвердить блокировку этой версии ревизий?
  • Если ревизии заблокированы, есть ли способ разблокировать их?
  • Если они не заблокированы, на что еще мне обратить внимание?

Обновление:Убедившись, что проблема не связана с блокировкой ревизий, я попытался снова выполнить слияние из командной строки, а не через черепаху.Он произвел слияние (ууу!), Но теперь, когда я смотрю на него, я заметил, что mergeinfo не обновляется ни для одного из измененных файлов, только для 6 несвязанных файлов, которые уже имели mergeinfo.Я не уверен, стоит ли беспокоиться об этом.Я до сих пор не знаю, почему черепаха не работает, но, по крайней мере, я могу сделать свою работу.

Ответы [ 2 ]

12 голосов
/ 16 марта 2011

Когда Tortoise выполняет слияние, она будет использовать только свойство mergeinfo, чтобы определить, какие ревизии следует объединить, если вы оставите поле ревизии пустым. Итак, вы «разблокируете» ревизию, просто объедините ее. Черепаха не перечисляет уже слитые ревизии в журнале

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

Альтернативный способ - посмотреть на свойство mergeinfo и посмотреть, есть ли эта ревизия в списке, если это так, удалить ее и зафиксировать. Затем повторите объединение, и оно должно работать так, как вы ожидаете.

У места назначения обычно есть информация о слиянии, но я предполагаю, что в вашей ветке также есть ветка, которая может блокировать слияние. Дайте нам знать, если это так, мне было бы интересно узнать, что на самом деле происходит с вами.

6 голосов
/ 16 марта 2011

Возможно, слияние было записано. Для двойной проверки, из C: \ Core (выглядит как проверка ствола):

svn propget -R svn:mergeinfo > mergeinfo.txt 

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

Он может быть указан как диапазон, поэтому прямой поиск # может не работать (например, файл .eg может содержать список 7230-7240, а не 7234). Если нет, то происходит что-то еще - если это так, возможно, слияние было записано файл или папка, которые не были проверены.

Я не уверен, как отменить запись mergeinfo без ручного редактирования (НЕ РЕКОМЕНДУЕТСЯ), но вы можете заставить его повторно объединить ревизию (и), передав --ignore-ancestry. Если это приводит к тому, что слияние что-то делает, тогда svn считает, что слияние уже произошло, и вы должны были видеть доказательства выше.

Если слияние еще не записано и описанные выше шаги не помогли, проверьте списки рассылки svn для идей.

...