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