首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SVN钩子停止工作- SVN更新未执行

SVN钩子停止工作- SVN更新未执行
EN

Stack Overflow用户
提问于 2013-11-05 15:36:09
回答 2查看 677关注 0票数 2

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

我正在网络上的服务器上运行VisualSVN服务器。据我所知,web服务器或承载VisualSVN服务器的服务器上没有任何变化。过去几天,VisualSVN服务器没有在事件查看器中显示任何事件,因此我无法查看是否存在错误,也无法找到任何特定于SVN的日志文件。当我运行'svn日志‘时,它只显示提交。如果有错误的话,我不确定是否会出现错误。

下面是正在运行的脚本的擦拭副本:

代码语言:javascript
复制
@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服务器上运行了工作副本的清理,但都没有效果。我还尝试从另一个工作站进行更新,只是看看它是否是我的本地机器,但它仍然不能正常运行。最后,我还尝试从命令行运行脚本,它运行并更新工作副本。实际上,似乎服务器只是没有运行它。

任何调试此问题的帮助都是非常感谢的。

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

代码语言:javascript
复制
echo hook ran at %date% %time% >> debug.txt

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

代码语言:javascript
复制
svn update \\<server-name>\<share>\dev\<working-copy-directory>\!NEWB! --username <svnuser> --password <svnpass> >> debug.txt)

这根本不返回任何信息。我对此完全不知所措。

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

代码语言:javascript
复制
svn update \\<server>\<share>\dev\<working-copy>\ScriptContent\test.cfm --username <svnuser> --password

它返回"svn: E020024:错误解决大小写“,并吐出我刚才给它的路径。

我确实尝试过搜索这个问题的一些来源,但我唯一发现的是用斜杠切换反斜杠,但它返回完全相同的错误,但斜杠切换回反斜杠。

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

而且,我越仔细考虑,上面更新2中从命令行获得的错误可能不是脚本运行时发生的错误,因为客户机端的提交屏幕(由TortoiseSVN运行)将显示错误。它不会显示任何错误。

这就是我所知道的。

  1. 这个剧本几天很好用
  2. 这个剧本在周末的某个时候突然停止了工作。
  3. 没有对承载工作副本的服务器或运行存储库的服务器进行任何更改。
  4. 钩子不会产生任何错误(这些错误将显示在TortoiseSVN提交屏幕上)。
  5. svn update命令未执行。

我完全不知所措。

EN

回答 2

Stack Overflow用户

发布于 2013-11-07 13:58:25

经过几天的斗争,我终于找到了解决办法。默认情况下,VisualSVN服务器运行在网络服务用户帐户上。为了解决这个问题,我遵循了以下步骤。

  1. 将存储库服务器上的用户帐户设置为VisualSVN服务器管理员组的成员
  2. 分配要在此帐户下运行的VisualSVN服务器服务
  3. 将web服务器上的用户帐户设置为管理员组的成员,其名称和密码与存储库服务器上的帐户相同。
  4. 重新启动VisualSVN服务器服务

在那之后它起作用了。钩子正在文件上运行SVN更新,与预期完全相同,并使用提交的更改更新web服务器的副本。我希望这也是对其他人的帮助,因为要想解决这个问题需要做很多工作。

票数 1
EN

Stack Overflow用户

发布于 2013-11-07 16:40:54

你做的事很不安全!不要向管理员组添加服务帐户。

据我现在所见,的根本原因是对共享上的工作副本的访问不足。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19792730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档