SVN Merge объединяет недостающие диапазоны, но нечего объединять
Вот загадка:
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
не показывает ничего для слияния.
Теперь я не могу реинтегрировать свою ветку в ствол! Пожалуйста помоги!
PS Ветвь lih не создавалась до 11906. Она была разветвлена от ветви hd, которая была разветвлена от транка (и hd уже был объединен обратно с транком).
2 ответа
Казалось, это работает для меня, но я не могу утверждать, что понимаю это или ручаюсь, что это лучший способ решить мою проблему.
Во-первых, важно, чтобы в вашей ветке были все последние коммиты на транк. Так синхронизируйте это (сделайте слияние от транка до ветви).
Затем вы можете принудительно выполнить реинтеграцию, выполнив это в директории транка:svn merge http://svn.e.com/repos/trunk/@REV http://svn.e.com/repos/branches/lih/ . --dry-run
(но замените REV последней версией #).
Я просто столкнулся с чем-то похожим, где проблема заключалась в том, что у ствола было две отменяющие ревизии (то есть, обороты 20865 на стволе и обрезанные обороты 20857). Поэтому, когда я впервые произвел слияние с транка на ветку, он не имел ничего для слияния для этой пары ревизий, но не включил их в mergeinfo для рассматриваемых файлов. Затем, когда я попытался объединиться из ответвления в ствол, он возразил, что эти две ревизии отсутствуют.
Мое решение (после ручной проверки того, что ревизии отменены для рассматриваемых файлов) состояло в том, чтобы объединить каждую из двух ревизий для явного ветвления (через svn merge ^/trunk -c 20857 и svn merge ^/trunk -c 20865), зафиксировать, а затем объединить филиал обратно в ствол. Во второй раз все прошло гладко. Это было с Subversion 1.8.0 (r1490375).
Ранее я мог обойти аналогичную проблему, используя слияние с --record-only, чтобы пометить изменения как правильно слитые в ветке, но, вероятно, безопаснее объединить реальные файлы (на случай, если есть изменение, которое не совсем отменить).
Похоже, ошибка в том, что Subversion 1.8 обрабатывает mergeinfo для отмены изменений для меня.