svn post-commit hook:“错误解决案例”& “跳过\\ ip-address \ users \ myDir”“消息

时间:2011-07-18 11:24:36

标签: windows svn

我在Windows上安装了Collabnet SVN服务器。另外,我已经实现了一个post-commit钩子,当我从工作副本“A”提交到存储库时,它应该更新项目的工作副本“B”。工作副本“B”驻留在网络驱动器上[H - > \\ ip-address \ users \ myDirB]:

  • 现在当我指定下面的代码行时,在我的post-commit钩子中提交一个工作副本“A”的变更集:

SET WORKING_COPY=H:/myDirB

我收到错误: svn post-commit hook:“错误解决案例”

  • 或者如果我指定: SET WORKING_COPY=//ip-address/users/myDirB

我收到错误:

“skipped \ ip-address \ users \ myDirB”“

我做错了什么?欢呼声。

请注意: * Collabnet Subversion服务器安装在我的C:驱动器

  • 它作为一个服务帐户运行,对我希望通过提交后挂钩自动更新的网络目录具有完全权限,即 - \\ ip-address \ users \ myDirB *

  • 我也有路径\\ ip-address \ users \ myDirB映射到H:驱动器

3 个答案:

答案 0 :(得分:1)

  

SET WORKING_COPY = // ip-address / users / myDirB

无法正常工作,因为cmd.exe需要普通路径(驱动器号,冒号,相对路径)。它无法处理其他路径,如UNC或IP地址。它必须有一封驱动器号。

  

SET WORKING_COPY = H:/ myDirB

然而这不起作用,因为您将H:映射到您登录的用户的某些内容。但是钩子脚本是作为svn服务器运行的用户运行的,即作为服务帐户运行。并且服务帐户会映射H:驱动器。

答案 1 :(得分:1)

我建议不要使用post commit hook来执行此操作。它会变得非常脆弱,而且很复杂 - 正如你所发现的那样。

您应该设置一个持续集成构建来监视svn repo,然后在需要时部署代码。将这些问题分开将使您在将来免于头痛,提供通知团队(IM,电子邮件或仪表板)的简便方法,并在您希望进行任何自动化测试时帮助您。

答案 2 :(得分:0)

我遇到的两个问题是(1)路径和(2)权限。我们的旧设置包括Windows 2008 R2上的collanet subversion服务器1.5.6和apache 2.2(它现在是Win 2008 R2上的wandisco 1.7.2 / apache2.2)。

最初,我将路径作为映射驱动器,并将subversion和apache服务作为本地系统帐户运行。所以,我们有类似的东西:

SET WORKING_COPY=X:\the\path\to\theworkingcopy

通过CLI运行它很好,但是通过后续挂钩提交和执行会导致像

这样的日志消息
Error resolving case of 'X:\the\path\to\theworkingcopy'

因此,我更改了WORKING_COPY以使用UNC路径,例如:

\\servername\DRIVELETTER$\the\path\to\theworkingcopy

还是同样的问题,但我认为需要以网络权限运行的服务(两者都是),因此我将服务“Log On As”更改为svn服务器和apache的域帐户。

我遇到的另一个问题是为服务“登录身份”用户设置域名。我使用了域用户,但是对域使用了通配符,例如“\ theuser”

然后就行了。

至于这是一个脆弱的解决方案,我同意CI是一个更好的方法。即使我们对UNC的svn更新是(1)记录的,(2)现在有效,(3)它不太可能在不久的将来改变 - 正如thekbb指出的那样 - 它并没有将问题分开。