SVN提交后钩子批处理Windows

3

我有一台运行Visual SVN Server的Windows服务器来存储我们的仓库。在那个服务器上还有我们的测试副本。

我想设置一个简单的SVN后提交挂钩,以便每次提交时它可以自动更新测试副本。

在Visual SVN中,我已经像这样设置了后提交挂钩:

"C:\Program Files (x86)\VisualSVN Server\bin\updatescripts.bat" D:\inetpub\TESTCOPY

那么,该批处理文件的简单更新如下:
PATH=%PATH%;"C:\Program Files (x86)\VisualSVN Server\bin\"
svn update %1

如果我在服务器上双击批处理文件或从命令行运行它,都可以正常工作。 但是,当我从我的笔记本电脑提交东西时,它会冻结,不给我任何错误提示,并锁定测试副本,因此我需要进去进行清理。
Visual SVN服务正在以网络服务的身份运行,该账户对bin文件夹和服务器上的测试副本具有完全访问权限。
有什么办法可以设置一个简单的svn更新提交后钩子吗?
谢谢 Fede

我正在尝试同样的事情,我曾经尝试在钩子本身内部完成所有操作,但是发现这种方法行不通。我得到了奇怪的结果,最终它没有更新,但是当我双击批处理文件时它可以工作。当我在post-commit钩子中更改批处理文件的名称时,它会给我一个错误,说找不到该文件。所以看起来钩子可以找到文件,但是没有执行它?我不知道,但是这就是我的代码。在post-commit钩子中: "C:/my path/myrepository/file.bat"在批处理文件中: cd "C:/working path/myrepository" svn update有人看到任何问题吗? - mgrenier
安装VisualSVN服务器后,它会添加%VISUALSVN_SERVER%环境变量。请检查它。 - bahrep
4个回答

1
您正在运行svn update命令。您想要更新的确切工作副本是什么?
传递的参数是仓库路径。这不是指工作目录,而是指包含Subversion主仓库的目录。这个目录也是您的提交后钩子存储的位置。
Subversion钩子无法访问用户的工作目录,因此您不能操作用户的文件。钩子脚本通常应该使用svnlook而不是svn。通过这样做,可以避免任何麻烦。
如果您知道位置,可以在服务器上更新Subversion工作副本。
PATH=%PATH%;"C:\Program Files (x86)\VisualSVN Server\bin\"
set SVN_WORK_DIR=C:\SVN\workdir"
svn update %SVN_WORK_DIR%

然而,我不建议这样做,因为它会占用Subversion。提交代码的用户必须等待更新完成,才能让Subversion将控制权返回给用户。

1

我曾经遇到过类似的问题,后来发现 SVN 喜欢使用正斜杠而不是反斜杠作为路径分隔符。

你可以试试这个方法:

set MYPATH=%1

:: Transform backslashes to forward slashes
set MYPATH=%MYPATH:^\=/%

svn update %MYPATH%

抱歉,但问题依旧,它会冻结并锁定我的测试副本。 - Federico Giust

0

尝试了无数种方法后,这个对我有用...

我将它放在我的提交后钩子中 "C:\Program Files\VisualSVN Server\bin\svn.exe" update "C:\my path\" 其中,我的路径是要更新的工作副本的路径

此外,我还必须将服务更改为以本地系统运行


本地系统?为什么?使用默认的网络服务,并为其提供访问C:\ my path \的权限。 - bahrep
当我使用网络服务时,我遇到了权限问题...这可能取决于特定安装的配置,只是想提一下,以防有人遇到类似的权限问题。 - mgrenier

0

那真的不是你想要做的方式。你应该使用类似 Jenkins 的工具来监视你的代码库。Jenkins 可以监视你的代码库,当它发生变化时,更新你的测试副本,启动构建,运行自动化测试等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接