2010-08-04 90 views
1

我试图让Subversion在提交时自动部署当前的工作副本。Subversion失败后提交挂钩?

例如,如果某人签出'public_html'回购并提交更改,我需要SVN在运行svn的服务器上自动运行'svn update/path/to/public_html /'。

我已经成立了一个post-commit钩子调用:

在/ usr/bin中/ SVN更新/路径/到/的public_html/

我已经确保提交后钩子是可执行的,如果我通过SSH手动运行脚本,它会正常运行并更新/ path/to/public_html/dir,因此我们知道提交后脚本正常工作。

我现在遇到的问题是,每当我承诺,我得到这个错误:

Transmitting file data .svn: Commit failed (details follow): 
svn: MERGE of '/svn/public_html': 200 OK (http://ourdomain.com) 

事情是,SVN躺在通过它的牙齿:提交其实没有失败 - 如果我手动更新dir(或手动运行提交后脚本)更新完成,并且更改将反映在服务器上。

那么,有谁知道为什么我的后提交挂钩失败?

我已经看过这篇文章的一些帖子,但似乎没有任何解决办法,除了“尝试运行后提交脚本手动”,我试过了,它工作正常..所以,提交脚本不是问题,它似乎是SV​​N本身的问题。

任何帮助将不胜感激!

+0

这并不直接回答你的问题,所以我将它包含在评论中而不是答案中 - 我建议不要直接在svn存储库中运行你的公共http服务器内容。相反,您应该使用构建和部署脚本,将脚本和内容打包并将其移至发布位置。自动搭配提交声音特别可怕 - 如果有人检查代码错误或写入中的粗鲁错字会怎么样?你永远没有机会在他们上线之前测试这些变化。 – Ether 2010-08-04 22:09:48

回答

1

你必须知道,在钩子脚本中没有环境存在..这意味着你必须在你的脚本中使用绝对路径而不是命令,因为你也没有路径。 您确定要使用post-commit,因为post-commit不能失败,只有提交前提交和启动提交可以做这样的事情。

+0

+1,退出代码和提交后的输出应该被svn忽略。 – Wrikken 2010-08-04 20:14:45

+0

谢谢,是的,即使SVN说它失败,提交仍然成功,它只是失败后的提交后钩子本身。 我知道没有环境。脚本的内容是: --- #/ bin/sh的 在/ usr/bin中/ SVN更新/web/ourdomain.com/dev/public_html --- – 1337ingDisorder 2010-08-06 17:35:11

0

检查svn服务器进程的userid在/ path/to/public_html /上是否有足够的权限来写入文件和目录。

另一个想法:它还需要访问自己的存储库,如工作副本“/ path/to/public_html /”中所述。如果您使用svn + ssh或http协议,则可能需要将其更改为文件协议 - 无论如何,它都位于同一台服务器上。

+0

权限都OK。 我不知道你可以使用file更新签出的回购副本:// 所以如果路径是/web/ourdomain.com/dev/public_html/我可以使用file:/// web /ourdomain.com/dev/public_html/而不是原始路径,SVN会以不同的方式对待它? – 1337ingDisorder 2010-08-06 17:36:34

+0

使用''svn开关''或''svn开关--relocate'' – 2010-08-18 12:33:09

+0

不是我不会使用工作副本作为公共html根目录,而是导出(通过“svn导出”),因为这将消除这些“。 svn /“目录条目。 – 2010-08-18 12:37:01