Subversion提交挂钩失败?

时间:2010-08-04 20:07:13

标签: svn hook post-commit svn-hooks

我正在尝试让subversion在提交时自动部署当前工作副本。

例如,如果某人检出'public_html'仓库然后提交更改,我需要SVN在运行svn的服务器上自动运行'svn update / path / to / public_html /'。

我已经设置了一个调用后的提交挂钩:

/ usr / bin / svn update / path / to / public_html /

我确保后提交挂钩是可执行的,如果我通过SSH手动运行脚本它运行正常并更新/ path /到/ public_html / dir,所以我们知道post-commit脚本工作正常。

我遇到的问题是每当我提交时,我都会收到此错误:

Transmitting file data .svn: Commit failed (details follow):
svn: MERGE of '/svn/public_html': 200 OK (http://ourdomain.com)
事实上,SVN正在撒谎:提交实际上并没有失败 - 如果我手动更新目录(或手动运行提交后脚本),则更新完成,更改将反映在服务器上。

那么,有谁知道为什么我的post-commit挂钩失败了?

我已经看过很多关于这个主题的帖子,但似乎没有任何解决方案除了“尝试手动运行后提交脚本”,我已经尝试过并且它工作正常..所以提交后脚本不是问题,它似乎是SV​​N本身的一个问题。

非常感谢任何帮助!!

2 个答案:

答案 0 :(得分:1)

你必须要知道,在钩子脚本中没有环境存在......这意味着你必须在脚本中使用绝对路径而不是命令,因为你也没有路径。 你确定使用了post-commit,因为post-commit不能使提交失败只有pre-commit和start-commit才能做到这一点。

答案 1 :(得分:0)

检查svn服务器进程的用户标识是否对/ path / to / public_html /具有足够的权限来写入文件和目录。

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