svn mergeinfo - E195016: "должно быть связано с наследством"

Хотя здесь есть несколько похожих вопросов (например, SVN - ошибка слияния реинтеграции: "должно быть связано с наследством") и в Интернете, я не смог понять, почему svn mergeinfo <file> вызывает ошибку во всех моих репозиториях SVN. В отличие от всех других вопросов и ответов, которые я нашел, я действительно могу выполнить svn merge успешно. Например, отмена предыдущего коммита pom.xmlфайл:

svn merge -r 17409:17408 pom.xml
--- Reverse-merging r17409 into 'pom.xml':
U    pom.xml
--- Recording mergeinfo for reverse merge of r17409 into 'pom.xml':
U   pom.xml
--- Eliding mergeinfo from 'pom.xml':
U   pom.xml

Тем не менее, когда я выполняю svn mergeinfoЯ получаю следующую ошибку:

svn: E195016: 'https://../trunk/MyProject/pom.xml@50446' must be ancestrally related to
'https://../trunk/MyProject@50446'

В этом примере 50446 - это номер текущей версии заголовка, и я получаю ту же ошибку для каждого файла, который я пробовал. Только когда я выполняю команду mergeinfo в самом верхнем каталоге, она работает:

svn mergeinfo .
    youngest common ancestor
    |         last full merge
    |         |        tip of branch
    |         |        |         repository path
    50446              50446   
    |                  |       
  -------| |------------         ../trunk/MyProject
     \                         
      \                        
       --| |------------         ../trunk/MyProject
                       |       
                       50446   

И даже более странно, я не нахожу никаких установленных свойств mergeinfo. Команды как svn propget svn:mergeinfo --recursive или же svn propget svn:mergeinfo --depth=infinity ничего не выводить и успешно вернуться с кодом состояния 0.

У кого-нибудь есть идея, как я могу исправить наши файлы так, чтобы они снова были "связаны по наследству" с проектами, в которых они находятся?

1 ответ

Решение

Короткий ответ: svn mergeinfo <file> неправильно.

Из документации SVN (svn help mergeinfo):

"Подведите итог истории слияния ИСТОЧНИКА и ЦЕЛИ".

"SOURCE и TARGET - это URL-адреса исходной и целевой ветвей соответственно".

Msgstr "Целью по умолчанию является текущий рабочий каталог ('.')."

Итак, если ваша команда была что-то вроде svn mergeinfo pom.xml, тогда сообщение об ошибке, как и ожидалось, так как между этим файлом и его каталогом нет "родовой связи".
Правильная команда будет: svn mergeinfo pom.xml pom.xml, который сравнит эти два файла, и, вероятно, это то, что вы хотите.

Когда ты бежишь svn mergeinfo ., это так же, как работает svn mergeinfo . ., Так что это работает, и вы получите вывод mergeinfo.

Вы также можете запустить svn mergeinfo pom.xml pom.xml@12345, чтобы сравнить конкретную ревизию.


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

Пожалуйста, прочитайте этот вопрос и обратите внимание, что автор создал ветку dev вручную, взломав SVN.

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

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