您能给出一些关于通过 HTTP/HTTPS 设置 Mercurial 的提示吗?我正在设置一个开发服务器 (Debian),我想在其中创建一个 mercurial 存储库并将更改推送到服务器。我需要进行身份验证以防止任何不必要的访问。
提前致谢。
答案1
我认为 Apache 是共享 hg 存储库的绝佳方式。hgweb.wsgi 脚本不仅提供了运行多个存储库的可能性,还允许开发人员方便地通过路径或修订版从权威来源交叉引用项目源代码。
以下步骤将提供一种发布存储库的简单方法,并通过 https 网络连接让经过身份验证的用户可以使用它。
首先,我建议克隆你的 repo,而不使用本地文件目录。
hg clone -U <myproject> <myproject_to_serve>
接下来(使用简单易用的 WSGI 配置),执行以下操作:
将你的 repo 移动到一个方便提供服务的地方:
mv <myproject_to_serve> /var/www/hg/<myproject_to_serve>
确保 Web 服务器用户可以读取/写入该 repo:
chown -R www-data:www-data /var/www/hg/<myproject_to_serve>
现在为项目用户设置读/写权限,并为服务器主页上的项目列表提供一些信息:
vim /var/www/hg/myproject_to_serve>/.hg/hgrc
[web]
description = 'This is my new web-enabled project <myproject>'
contact = [email protected]
# consider limiting push usage to only a subset of users
allow_push = *
现在设置 WSGI
vim /var/www/hg/hgweb.config
[paths]
/myproj = /var/www/hg/my_project_to_serve
现在设置 apache
<VirtualHost *:443>
ServerName hg.mydomain.net
ServerAdmin [email protected]
ErrorLog /var/www/mydomain/logs/hg_error_log
CustomLog /var/www/mydomain/logs/hg_access_log common
SSLEngine on
SSLCertificateFile /etc/ssl/mydomain_net.crt
SSLCertificateKeyFile /etc/ssl/mydomain_net.key
DocumentRoot "/var/www/hg/"
<Location "/hg">
SetHandler None
</Location>
# path to provided hgweb.wsgi script
WSGIScriptAlias / /var/www/hg/scripts/hgweb.wsgi
<Location / >
AuthType Digest
AuthName "MySoftware"
AuthUserFile /home/software/software_web_permissions
Require valid-user
</Location>
</VirtualHost>
以上要求您具备:
- hgweb.wsgi 脚本(在 Debian 等平台上,标准 Mercurial 安装时会附带该脚本)可以方便地在某个地方找到
- 用于创建经过身份验证的用户的 apache htdigest 格式的 AuthUserFile。
浏览将向hg.mydomain.net
您显示一个格式良好的可用项目列表。hg.mydomain.net/myproj
将在成功身份验证后向您显示根据/var/www/hg/<myproject_to_serve>
repo 的项目当前状态。
答案2
我的建议是,如果你真的不需要任何类型的 Web 界面,ssh
那么就使用传输协议。它甚至不需要真正的配置,你只需要ssh
安装 Mercurial 即可。
hgtest
举个例子:要将位于的远程仓库克隆~username/hgtest
到当前目录中,请使用以下命令
hg clone ssh://[email protected]/hgtest
答案3
有关这些选项以及优点/缺点的很好的总结可以在mercurial 维基。