1

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

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

我设置了一个提交后挂钩,它调用:

/usr/bin/svn 更新 /path/to/public_html/

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

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

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

事实是,SVN 是在说谎:提交实际上并没有失败——如果我手动更新目录(或手动运行提交后脚本),更新完成并且更改会反映在服务器上。

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

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

任何帮助将不胜感激!!

4

2 回答 2

1

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

于 2010-08-04T20:13:10.483 回答
0

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

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

于 2010-08-04T20:15:05.310 回答