我知道使用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
感到满意),这就是完美的。但是,我们还希望允许远程创建repos,而无需在服务器上维护额外的/修补的脚本以及客户端上的额外工具。
要明确:这个问题并没有要求解决我们的特定问题,而是因为Mercurial本身不支持此功能。
更新
这是我正在考虑的情况的更多技术描述。假设hgwebdir.cgi
在/path/to/repos
https://.../repos
处提供了一系列存储库(启用了推送功能)。允许访问此URL的每个用户(在Apache中配置)可以提取和推送更改集,这实际上意味着hgwebdir.cgi
(以及hg
)编辑并创建/path/to/repos
以下的文件。现在,让hgwebdir.cgi
在/path/to/repos
以下创建新存储库的障碍是什么?
答案 0 :(得分:5)
我认为原因是增加对创建存储库的支持会带来相当多的包袱:
如果您可以创建您希望能够删除它们的存储库。虽然这看起来很简单,但与Mercurial正常工作的安全方式相比还有很大的进步 - 标准Mercurial中没有破坏性命令。
人们还想编辑.hg/hgrc
文件来设置描述和联系信息 - 标准的Mercurial永远不会更改配置文件,所以这将是一件新事。
人们还希望管理用户对新存储库的访问权限 - 这意味着要编辑.htaccess
文件或其他网络服务器的等效文件。
......等等。实现这个“小”功能将为许多额外的功能请求打开,我们只有一些Mercurial开发人员也是看不见的Web开发人员。
但是,现在有一个出色的开源解决方案:Kallithea为您提供了一个可以在您自己的服务器上部署的“迷你Bitbucket”。它将完成上述所有工作。如果我需要比普通hgweb.cgi
更强大的东西,我会在我的服务器上安装它。它支持Mercurial和Git。
答案 1 :(得分:0)
据我所知,没有任何SCM替代方案允许本地创建远程存储库。 SVN,CVS,Git,et al。
这通常是托管服务提供商的工作:SourceForge,Google Code,BitBucket。所有这些都在其认证基础架构之上实现了存储库创建。
例如,Debian's Mercurial hosting仅限于Debian开发人员,要创建新的存储库,您需要通过SSH登录到服务器并在本地主文件夹上创建存储库,就像Apache's public_html
目录一样
答案 2 :(得分:0)
各种答案(包括你自己的答案)给出了一些很好的理由,说明为什么功能不存在(主要是关注点分离),但是如果你真的想要添加它,你可以只使用一行或两行shell。这是一个非常不安全的例子,我前段时间展示了如何在高信任度环境中添加该功能:Remote Repository Creation in Mercurial over HTTP