当我对一个文件执行 Svn up 操作时,如果进行了本地修改,就会产生冲突。
是否可以使用钩子取消 svn 更新并写入消息?
谢谢
答案1
如果你只想忽略任何会导致特定文件发生冲突的更改,那么你可能需要svn update --accept=mine-full
。这意味着如果更改会导致冲突,则丢弃传入的更改。
http://svnbook.red-bean.com/en/1.5/svn.tour.cycle.html#svn.tour.cycle.resolve
如果您想确定对任何文件的更改是否会引起冲突,请使用svn status -u
来确定您将获得哪些更改。
答案2
我认为你不能在服务器端做到这一点。
然而,从 1.5 版开始,TortoiseSVN支持客户端钩子,包括更新前和更新后。我不确定其他客户端是否支持。
结合
svn status --show-updates --verbose
和一些脚本可能会让你做你想做的事。
根据文档,svn status --show-updates --verbose 将为您提供类似以下示例的状态列表:
$ svn status --show-updates --verbose
M * 44 23 sally README
M 44 20 harry bar.c
* 44 35 harry stuff/trout.c
D 44 19 ira stuff/fish.c
A 0 ? ? stuff/things/bloo.h
Status against revision: 46
如果我理解正确的话,任何时候您看到同一个文件的 M(表示本地修改)和 *(表示在存储库中更改),就会发生冲突。
因此,您需要做的就是解析该输出,如果看起来会有冲突,则中止更新。
希望有所帮助。
答案3
您将需要一个预提交钩子,在您的 svn 存储库目录中有一个钩子目录,其中包含类似 pre-commit.bat(在 Windows 上,或 pre-commit.sh)的内容。SVN 将在您提交之前执行此操作,因此只需将其替换为您希望运行的脚本,您就可以停止向 SVN 提交。