【发布时间】:2011-02-08 13:24:01
【问题描述】:
我知道使用 HTTP(S) 远程创建 Mercurial 存储库是 not possible,例如:
$ hg init https://host.org/repos/project
或
$ hg clone /path/to/local/project https://host.org/repos/project
但是,这是什么原因呢?安全问题?不需要吗?仅仅因为还没有人实现它?
这个问题的基本原理:在我的公司,我们通过 HTTPS 共享大部分资源,即访问权限仅由 Apache 管理,普通用户无法通过服务器上的 SSH 登录。只要只需要提供存储库,这就是完美的(为此,我们对hgwebdir.cgi 感到满意)。但是,我们还希望允许远程创建存储库,而无需在服务器上维护额外的/修补过的脚本以及在客户端上维护额外的工具。
明确一点:这个问题并不是要解决我们的特定问题,而是因为 Mercurial 本身不支持此功能。
更新
下面是对我正在考虑的情况的更技术性的描述。假设hgwebdir.cgi 为/path/to/repos https://.../repos 中的存储库集合提供服务(启用推送)。每个允许访问此 URL(如 Apache 中配置)的用户都可以拉取和推送变更集,这实际上意味着 hgwebdir.cgi(因此 hg)在 /path/to/repos 下编辑和创建文件。现在,让hgwebdir.cgi 在/path/to/repos 下创建新存储库的障碍是什么?
【问题讨论】:
-
你自己不是已经给出答案了吗?整个网络设置(尤其是权限)由 apache 管理,Mecurial 不知道如何配置或扩展您的特定 apache 设置。
-
@Zarat: AFAIK
hgwebdir.cgi在服务器端运行hg,然后在存储库中编辑/删除/创建文件(通常作为网络服务器用户,例如 www-data我>)。hg不应该能够类似地在config.web指定的目录中创建新的存储库(当然也属于www-data)吗? -
好吧,我认为这是一个边缘案例,我昨天自己设置了一个多存储库服务器,你需要多个 cgis 来获得不同的权限。我想问题是服务器设置部分超出了 cgi/hg 的职责。
-
我同意这将是一个有用的功能。目前,我们在主服务器上创建 repo 的当前工作流程是登录(通过 RDP)到我们的主服务器,然后手动克隆开发人员的 repo,他是
hg serve'ing。我承认这不会花很长时间,但如果 webdir 应用程序暴露某种方式来通过网页启动克隆操作会更好。这样我们就不必担心让开发人员直接 RDP 访问我们的主服务器。 -
@Zarat:是的,我知道我们需要多个 CGI 来获得不同的权限。但是假设
hgwebdir.cgi在https://.../repos提供/some/path中的集合(启用推送),那么从技术上讲,允许访问此URL 的每个人也可以在/some/path下面创建存储库应该不是一个大问题,对吧?