0

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

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

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

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

4

2 回答 2

2

它主要类似于Trust

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

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

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

于 2011-11-26T20:14:40.957 回答
0

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

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

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

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

恐怕我无法进一步帮助你。

于 2011-11-26T19:26:55.260 回答