3

我试图让 Mercurial 在 Mac OS X Lion 上的 Apache 下使用 hgwebdir.cgi 服务。

我按照此处列出的说明进行操作: http ://www.popitandrockit.com/2010/05/mercurial-server-on-osx-106-snow.html

那篇文章是给 Snow Leopard 的(我猜还没有人尝试在 Lion 上这样做?)但它主要是有效的。我确实做了修改,我没有使用 https,因为有问题的机器在我公司的防火墙后面。

它说我应该能够访问存储库,http://servername/repository_name但这不起作用。但是,我可以在 获取它们的列表,地址在http://servername/hg/哪里。所以我应该能够通过 访问存储库,但是我得到了一个不错的 Mercurial 页面,告诉我/hgScriptAliashttp://servername/hg/repository_name

An error has occured while processing your request:

repository /Users/username/Documents/repository_name not found

好吧,根据 Mercurial,该目录是有效的并且那里有一个有效的存储库(即,hg log类似的命令不会出错)

在主页上,我在 Apache 中遇到了类似的错误:

[(date)] [error] [client (ip address)] error accessing repository at /Users/username/Documents/repository_name

如果我猜我会说这是某种访问或权限问题,但我对 Apache 或 Mac OS X Lion 不够熟悉,无法猜测如何修复它。

4

1 回答 1

3

这确实看起来像一个权限问题。在标准的 Mac OS X Apache 上安装 web 用户和组_www,您需要确保它们具有读写权限。如果 hgrc 文件的权限与用户不匹配,Mercurial 也会抱怨。有两种方法可以修复它:

  1. 使存储库归 Apache_www用户所有。当您键入:

    ls -ld /Users/username/Documents/repository_name
    

    它应该显示_www _www在第三和第四列。如果不是,请更改目录的用户:

    sudo chown -R _www:_www /Users/username/Documents/repository_name
    

    请注意,如果更改此设置,则不应从任何其他用户访问文件系统上的存储库,否则任何新创建的文件将再次具有错误的权限。

  2. 或者,将您的用户显式添加到您的trusted部分hgweb.config

    [trusted]
    users=username
    

    在这种情况下,您仍然需要确保_www用户完全可以访问。如果您键入:

    ls -ld /Users/username/Documents/repository_name
    

    它应该drwxrwxr--在第一列(中间rw很重要)和_www第四列中显示类似的内容。如果组不能读取或写入文件,请使用 chmod 命令来创建它们:

    chmod -R go+rwX /Users/username/Documents/repository_name
    

    您可以将存储库的组更改为_www

    sudo chown -R :_www /Users/username/Documents/repository_name
    

两者中哪一个更可取取决于您的情况:如果您尝试将存储库托管在服务器上,我会说第一个更可取,它更简单且更安全。如果您为了方便而尝试将它托管在本地工作站上,那么第二个更容易,因为您仍然可以从当前用户访问存储库。

请注意,对于临时共享,仅hg serve在命令行上运行可能更容易。

我希望这会有所帮助。

于 2011-10-20T11:14:22.293 回答