当我在一个可以产生冲突的本地修改的文件中做一个Svn。
是否有可能通过挂钩取消svn更新并写入消息?
谢谢
如果你只是想忽略任何会导致特定文件冲突的变化,那么你可能需要svn update --accept=mine-full
。 这意味着如果更改会导致冲突,请放弃传入的更改。
http://svnbook.red-bean.com/en/1.5/svn.tour.cycle.html#svn.tour.cycle.resolve
如果您想要决定是否更改任何文件会导致冲突,请使用svn status -u
来确定要获取的更改。
我不认为你可以做到服务器端。
不过,截至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(对本地修改)和*(在版本库中更改)对于同一个文件,你将会发生冲突。
所以你所需要做的就是parsing那个输出,如果看起来你会有冲突就放弃更新。
希望有所帮助。
你需要一个预先提交的钩子,在你的svn版本库目录中有一个钩子目录,包含一些像pre-commit.bat(在windows上,或者precommit.sh)。 SVN会在你提交之前执行这个,所以只要用你想运行的脚本replace它,你就可以停止提交SVN。