2012-10-24 4 views
8

Вот загадка:SVN слияние реинтеграции недостающих диапазонов, но ничего, чтобы объединить

C:\code\trunk> svn merge --reintegrate http://svn.e.com/repos/branches/lih --accept postpone --dry-run 
svn: E195016: Reintegrate can only be used if revisions 11430 through 12384 were previously merged from http://svn.e.com/repos/trunk to the reintegrate source, but this is not the case: 
    branches/lih 
    Missing ranges: /trunk:11902 

Но если я иду в каталог филиала и попытаться объединить этот диапазон, нет ничего, чтобы объединить!

C:\code\branches\branch> svn merge -r 11901:11902 http://svn.e.com/repos/trunk --accept postpone --dry-run 
C:\code\branches\branch> 

Даже svn merge -r 11898:11903 ничего не показывает, чтобы слиться.

Теперь я не могу реинтегрировать свою ветку в багажник! Пожалуйста помоги!

P.S. Разветвление lih не было создано до 11906. Оно было разветвлено из ветви hd, которая была разветвлена ​​от ствола (и hd уже слита обратно в багажник).

ответ

3

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

Во-первых, важно, чтобы ваша ветка имела все последние фиксации в багажнике. Так что синхронизируйте его (сделайте слияние от туловища до ветки).

Тогда вы можете по существу принудительно реинтегрировать, выполнив это в каталоге соединительных линий: svn merge http://svn.e.com/repos/trunk/@REV http://svn.e.com/repos/branches/lih/ . --dry-run (но замените REV на последнюю версию #).

+1

Это действительно помогло мне, но вместо того, чтобы REV была последней версией багажника, мне пришлось установить ее в версию, в которой была создана ветка. Это позволит избежать изменений, связанных с слиянием, которые произошли в багажнике во время разработки в филиале. – ceztko

4

Я просто столкнулся с чем-то похожим, в котором проблема заключалась в том, что у сундука были две отменяющие ревизии (т. Е. Rev 20865 на trunk undid rev 20857). Поэтому, когда я впервые объединился с trunk to branch, у него не было ничего, чтобы объединиться для этой пары ревизий, но не включил их в mergeinfo для рассматриваемых файлов. Затем, когда я попытался объединиться из ветки в багажник, он возразил, что эти две версии отсутствуют.

Мое решение (после проверки вручную, что изменения, отмененные для рассматриваемых файлов), состояло в том, чтобы объединить каждую из двух ревизий в явную ветвь (через svn merge ^/trunk -c 20857 и svn merge ^/trunk -c 20865), зафиксировать, а затем объединить ветвь обратно в магистраль. Во второй раз все прошло гладко. Это было с Subversion 1.8.0 (r1490375).

Мне удалось обойти подобную проблему раньше, используя слияние с -record-only, чтобы отметить изменения, которые должным образом объединены в ветке, но, вероятно, безопаснее объединять фактические файлы (на всякий случай есть изменения, которые не совсем отменяет).

Похож на ошибку в том, как Subversion 1.8 обрабатывает mergeinfo для отмены изменений для меня.