我试图让Mercurial在Mac OS X Lion的Apache下使用hgwebdir.cgi服务。
我按照下面列出的指示去做:http://www.popitandrockit.com/2010/05/mercurial服务器——在osx - 106 snow.html
这篇文章是针对雪豹的(我猜还没有人尝试在Lion上这么做?),但它基本上是有效的。我确实做了修改,我没有使用https,因为有问题的机器在我公司的防火墙后面。
它说我应该能够访问http://servername/repository_name
的存储库,但这不起作用。但是,我可以在http://servername/hg/
中获得它们的列表,其中/hg
是ScriptAlias
地址。所以我应该能够通过http://servername/hg/repository_name
访问存储库,但相反,我得到一个漂亮的Mercurial页面告诉我
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不够熟悉,无法大胆猜测如何修复它
这看起来确实像一个权限问题。在标准的Mac OS X Apache上安装web用户和组是_www
,您需要确保它们具有读写访问权限。另外,如果hgrc文件的权限与用户不匹配,Mercurial会报错。有两种方法可以修复它:
-
使存储库归Apache
_www
用户所有。当你输入:ls -ld /Users/username/Documents/repository_name
在第三列和第四列应该显示
_www
_www
。如果不是,请更改目录的用户:sudo chown -R _www:_www /Users/username/Documents/repository_name
请注意,如果您更改了这个,您不应该从任何其他用户访问文件系统上的存储库,否则任何新创建的文件将再次具有错误的权限。
-
或者,显式地将您的用户添加到
hgweb.config
的trusted
部分:[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
可能更容易。