我在Windows上安装了Collabnet SVN服务器。另外,我已经实现了一个post-commit钩子,当我从工作副本“A”提交到存储库时,它应该更新项目的工作副本“B”。工作副本“B”驻留在网络驱动器上[H - > \\ ip-address \ users \ myDirB]:
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:驱动器
答案 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)
最初,我将路径作为映射驱动器,并将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指出的那样 - 它并没有将问题分开。