我正在尝试让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挂钩失败了?
我已经看过很多关于这个主题的帖子,但似乎没有任何解决方案除了“尝试手动运行后提交脚本”,我已经尝试过并且它工作正常..所以提交后脚本不是问题,它似乎是SVN本身的一个问题。
非常感谢任何帮助!!
答案 0 :(得分:1)
你必须要知道,在钩子脚本中没有环境存在......这意味着你必须在脚本中使用绝对路径而不是命令,因为你也没有路径。 你确定使用了post-commit,因为post-commit不能使提交失败只有pre-commit和start-commit才能做到这一点。
答案 1 :(得分:0)
检查svn服务器进程的用户标识是否对/ path / to / public_html /具有足够的权限来写入文件和目录。
另一个想法:它还需要访问自己的存储库,如工作副本“/ path / to / public_html /”中所述。如果您使用svn + ssh或http协议,您可能希望将其更改为文件协议 - 无论如何它都在同一台服务器上。