我一直在为我的 Subversion 存储库开发一个提交后挂钩,当其他工作副本被提交时,它将更新我的实时服务器上的特定工作副本。当我在整个工作副本上运行更新命令时,它可以工作,但当我想对已更改的特定文件执行此操作时,它就不行了。我在 Windows 2008 服务器上运行 VisualSVN 服务器,并且钩子是从 .cmd 文件运行的。
任何帮助是极大的赞赏。这是我正在使用的代码:
@ECHO OFF
svnlook dirs-changed %1 -r %2 | findstr /b /i "trunk"
IF %ERRORLEVEL% EQU 0 (
pushd <path_to_working_copy>
SET CHANGES=svnlook changed %1 -r %2
FOR /F "tokens=2" %%a IN ('%CHANGES%') DO (svn update %%a --username <username> --password <password>)
)
我相信 FOR 循环有问题,但我不知道它是什么。这是用于更新整个工作副本的代码。但是,此解决方案并不是真正可行的,因为每次提交运行更新都需要很长时间:
@ECHO OFF
svnlook dirs-changed %1 -r %2 | findstr /b /i "trunk"
IF %ERRORLEVEL% EQU 0 (
pushd <path_to_working_copy>
svn update --username <username> --password <password>
)
编辑:根据我在 CMD 中阅读的有关 FOR 循环的内容,我对上面的代码进行了一些小改动,但它仍然无法正常工作。我没有收到任何错误,但更新没有执行。
编辑:我找到了一个问题的解决方案,它作为 .bat 文件或 CMD 文件运行得很好,但它仍然没有从 post-commit.cmd 更新。它不返回任何错误,只是不运行更新:
@ECHO OFF
svnlook dirs-changed %1 -r %2 | findstr /b /i "trunk"
IF %ERRORLEVEL% EQU 0 (
FOR /F "tokens=2" %%a IN ('svnlook changed %1 -r %2') DO (SET NEWA=%%a & SET NEWB=%NEWA:trunk/=% & svn update <path_to_working_copy>\%NEWB% --username <username>--password <password>)
)