SVN Hook停止工作 - SVN更新未执行

时间:2013-11-05 15:36:09

标签: svn batch-file cmd visualsvn-server post-commit-hook

我有一个SVN存储库,我在大约一个月前设置了,经过一些努力后得到了一个后提交钩子,用于在开发服务器上更新我的网站的工作副本。它工作好几天然后,昨天,突然间,它停了下来。

我正在从网络上的服务器运行VisualSVN Server。据我所知,Web服务器或托管VisualSVN服务器的服务器没有任何变化。 VisualSVN服务器在过去几天内未在事件查看器中显示任何事件,因此我无法查看是否存在错误,并且找不到任何特定于SVN的日志文件。当我运行'svn log'时,它除了提交之外不会显示任何内容。如果有的话,我不确定是否会显示错误。

以下是正在运行的脚本的清理副本:

@ECHO OFF

setlocal enableDelayedExpansion

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 \\<server-name>\<share>\dev\<working-copy-directory>\!NEWB! --username <svnuser> --password <svnpass>) 
)

endlocal

我还检查了服务器上的任何锁,发现没有,并且在我的DEV服务器上运行清理工作副本,但都无济于事。我还尝试从另一个工作站进行更新,只是为了查看它是否可能是我的本地计算机,但它仍然无法正常运行。最后,我还尝试从命令行运行脚本,它运行并更新工作副本。实际上似乎服务器没有运行它。

非常感谢任何有关调试此问题的帮助。

更新:在找到一些调试策略之后,我能够通过包含如下命令确认钩子确实在运行:

echo hook ran at %date% %time% >> debug.txt

这记录了提交,正如预期的那样。我还包括类似的调试代码,以确保钩子正在捕获正确的主干/分支,它是,我也让它在更新之前记录目录,所以我新的它将运行该命令。它所做的一切。然后,在尝试记录服务器响应时,我将更新代码更改为以下内容:

svn update \\<server-name>\<share>\dev\<working-copy-directory>\!NEWB! --username <svnuser> --password <svnpass> >> debug.txt)

这根本不会返回任何内容。我完全失去了这个。

更新2:当我测试这个问题时,我没有得到这个,但是现在当我自己运行命令时...

svn update \\<server>\<share>\dev\<working-copy>\ScriptContent\test.cfm --username <svnuser> --password

它返回“svn:E020024:错误解决案例”并吐出我刚给它的路径。

我确实尝试谷歌这个问题的一些来源,但我发现的唯一的事情建议用斜杠切换反斜杠,但它返回完全相同的错误,但斜杠切换回反斜杠。

更新3:为了检查错误是否与作为网络服务运行的服务器有关并尝试通过UNC路径访问工作副本,我尝试将服务更改为以我的名义运行并映射网络在脚本中驱动并使用此映射驱动器。这个测试没有给我任何错误,但没有执行更新。

此外,我考虑的越多,我在上面的UPDATE 2中从命令行获得的错误可能不是脚本运行时发生的错误,如客户端的提交屏幕(由TortoiseSVN运行) )会告诉我错误。它没有显示任何错误。

所以,这就是我所知道的。

  1. 该脚本工作好几天
  2. 周末,剧本突然停止了一段时间
  3. 未对托管工作副本的服务器或运行存储库的服务器进行任何更改
  4. 钩子没有产生任何错误(因为这些会显示在TortoiseSVN提交屏幕中)。
  5. svn update命令未执行。
  6. 我完全失败了。

2 个答案:

答案 0 :(得分:1)

经过几天的战斗,我终于找到了解决方案。默认情况下,VisualSVN Server在Network Service用户帐户上运行。为了解决这个问题,我按照这些步骤进行了操作。

  1. 在存储库服务器上设置用户帐户,作为VisualSVN服务器管理员组的成员
  2. 指定VisualSVN服务器服务在此帐户下运行
  3. 在Web服务器上以Administrators组成员身份设置用户帐户,其名称和密码与存储库服务器上的帐户相同
  4. 重新启动VisualSVN服务器服务
  5. 之后它起作用了。挂钩正在对文件运行SVN更新,与预期完全一致,并使用提交的更改更新Web服务器工作副本。我希望这也是对其他人的帮助,因为要花很多工作才能解决这个问题。

答案 1 :(得分:0)

你做的很不安全!请勿将服务帐户添加到管理员组。

据我所知,根本原因是对共享上的工作副本的访问权限不足

您必须为VisualSVN Server的服务帐户提供对共享的访问权限。 (NTFS和共享权限)。默认情况下,VisualSVN Server的服务在“网络服务”帐户下运行。此帐户在网络上标识为COMPUTER帐户。因此,您必须为COMPUTER帐户提供对工作副本所在共享的访问权限。如果您仍打算在专用帐户下运行服务器:文章http://www.visualsvn.com/support/topic/00024/必须阅读!