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 для отмены изменений для меня.

Другие вопросы по тегам