SVN 钩子 / svn up / 冲突

SVN 钩子 / svn up / 冲突

当我对一个文件执行 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 提交。

相关内容