我大约一个月前建立了一个 SVN 存储库,经过一番努力后,我得到了一个 post-commit 挂钩,可以在开发服务器上更新我的网站的工作副本。它工作了好几天,然后,昨天,突然间,它停止了。
我正在从我网络上的服务器运行 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: Error resolve case of”并吐出我刚刚给它的路径。
我确实尝试用谷歌搜索这个问题的一些来源,但我发现的唯一一件事是建议用斜杠切换反斜杠,但它返回完全相同的错误,但斜杠切换回反斜杠。
更新 3:为了检查错误是否与作为网络服务运行并尝试通过 UNC 路径访问工作副本的服务器有关,我尝试将服务更改为以我的名义运行并映射网络驱动器并使用脚本中的这个映射驱动器。该测试没有给我任何错误,但没有执行更新。
此外,我想得越多,我在上面的 UPDATE 2 中从命令行得到的错误可能不是脚本运行时发生的情况,因为客户端的提交屏幕(由 TortoiseSVN 运行)会显示我的错误。它没有显示任何错误。
所以,这就是我所知道的。
- 该脚本运行了好几天
- 该脚本在周末的某个时间突然停止工作
- 没有对托管工作副本的服务器或运行存储库的服务器进行任何更改
- 钩子不会产生任何错误(因为这些会显示在 TortoiseSVN 提交屏幕中)。
- svn update 命令未执行。
我完全不知所措。