Обнаружение реинтеграции или слияния веток в сценарии предварительной фиксации
В сценарии предварительной фиксации возможно (и если да, то как) определить коммиты, вытекающие из svn merge
?
svnlook changed ...
показывает файлы, которые изменились, но не различает слияния и ручные изменения.
В идеале я также хотел бы различать стандарт merge
и merge --reintegrate
,
Фон:
Я изучаю возможность использования хуков предварительной фиксации для реализации политик использования SVN для нашего проекта.
Одна из политик гласит, что некоторые каталоги (такие как /trunk
) не следует изменять напрямую, а изменять только путем реинтеграции ветвей функций. Поэтому сценарий предварительной фиксации отклоняет все изменения, внесенные в эти каталоги, кроме реинтеграций ветвей.
Есть идеи?
Обновить:
Я исследовал svnlook
команда, и самое близкое, что у меня есть, это обнаружить и проанализировать изменения в svn:mergeinfo
свойство каталога. Этот подход имеет некоторый недостаток:
svnlook
может пометить изменение свойств, но не то, какое свойство было изменено. (разница сproplist
предыдущей ревизии не требуется)- Осматривая изменения в
svn:mergeinfo
, можно обнаружить, чтоsvn merge
был запущен. Однако нет способа определить, являются ли коммиты просто результатом слияния. Изменения, сделанные вручную после слияния, останутся незамеченными. (связанный пост: Различить дерево транзакций по другому пути / ревизии)
2 ответа
В конце концов я прибег к неидеальному решению, то есть обнаружению изменений в svn:mergeinfo
свойство в верхнем каталоге дерева изменений (реализовано в SVNTransaction.is_merge_operation()
).
Мы не можем различать коммиты только для слияния и коммиты, которые также включают дополнительные изменения. Это означает, что все изменения, которые происходят под этим деревом, останутся незамеченными, если они будут совершены вместе со слиянием. Возможное решение может заключаться в том, чтобы дифференцировать дерево транзакций от источника слияния, но я еще не выяснил, как этого добиться (это также должно будет учитывать изменения в результате разрешения конфликтов).
Он также не может различить merge
и merge --reintegrate
,
Другие ограничения включают в себя зависимость от svn:mergeinfo
который модифицируется пользователем и не используется в более старой версии Subversion.
Рассматриваемые сценарии фиксации предназначены для мягкого напоминания о фиксации коммитов, которые идут вразрез с руководящими принципами проекта, а не с механизмом контроля доступа, поэтому перечисленные выше ограничения не являются ограничителем показа. Тем не менее, я все еще в поисках улучшений. Комментарии и дальнейшие предложения приветствуются.
К сожалению, Subversion не обеспечивает фиксацию только слиянием
если у меня есть доступ к ветке, я могу сделать все, что угодно после слияния и перед коммитом
также слияние Subversion происходит на стороне клиента
Многие инструменты хранилища кода будут сливаться на сервере. т.е. обеспечить, что вы перемещаете патчи только из одного потока в другой