Hgweb和changegroup hook无法正常工作

时间:2011-11-26 16:22:50

标签: mercurial mercurial-hook

我使用hgweb发布我的本地存储库。

/project_path/project_name/.hg/.hgrc有:

[hooks]
changegroup.bitbucket  =  hg push ssh://hg@bitbucket.org/user/repo

当我使用 hg serve 时,所有的changegroup挂钩都能正常工作,但是当我使用 hgweb 通过nginx使用fcgi时,它就是'根本不工作。我需要这些功能来进行某种备份。

2 个答案:

答案 0 :(得分:2)

它大部分都像Trust

Mercurial在解析/运行它之前需要信任一个hgrc文件。如果您拥有/project_path/project_name/.hg/.hgrc文件,那么当您运行Mercurial时hg serve运行,因为它已被解析/使用。但是,nginx作为自己的用户运行,可能是nginx,它不信任您拥有的文件,因此当它调用Mercurial时,这些文件将被忽略(参见注释)。

Mercurial信任链接提供了更好的解释并讨论了如何说“nginx信任X”,但如果它是单用户系统或者你希望每个人都信任你,你可以在系统中抛出一个信任块/etc/mercurial/hgrc文件说每个人都信任X.

注意:它实际上并没有忽略那些在STDERR上发出警告的文件,这些文件在你在error.log中找到的apache-land中,但是在nginx土地上似乎没有人能找到那些警告所以我'我不知道nginx把它们放在哪里。

答案 1 :(得分:0)

我假设您在此处遇到某种身份验证问题。从命令行运行hg serve时,您的ssh凭据由在后台运行的ssh-agent提供。

但是,将hgweb作为服务运行时,这不起作用,因为后台没有运行ssh-agent。如果您要启动ssh-agent,则无法输入ssh密钥的密码。

Bitbucket使用ssh密钥对您进行身份验证,因此您不能只将密码添加到上述hg push命令中。

一种可能的解决方案是不使用bitbucket作为备份,而是使用不同的mercurial服务器,让您在命令行上提供简单的密码。

我担心我无法帮助你进一步解决这个问题。