Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';Mercurial是否支持通过HTTP创建远程存储库?_Mercurial_Hgweb - Fatal编程技术网

为什么';Mercurial是否支持通过HTTP创建远程存储库?

为什么';Mercurial是否支持通过HTTP创建远程存储库?,mercurial,hgweb,Mercurial,Hgweb,我知道使用HTTP远程创建Mercurial存储库是非常困难的,例如: $ hg init https://host.org/repos/project 或 但是,原因是什么?安全问题?不需要吗?仅仅因为还没有人实施它 这个问题的理由:在我的公司,我们通过HTTPS共享大部分资源,即访问权限仅由Apache管理,普通用户不能通过SSH登录服务器。只要只需要为存储库提供服务(为此,我们很乐意使用hgwebdir.cgi)。但是,我们还希望允许远程创建repo,而无需在服务器上维护附加/修补脚本,

我知道使用HTTP远程创建Mercurial存储库是非常困难的,例如:

$ hg init https://host.org/repos/project

但是,原因是什么?安全问题?不需要吗?仅仅因为还没有人实施它

这个问题的理由:在我的公司,我们通过HTTPS共享大部分资源,即访问权限仅由Apache管理,普通用户不能通过SSH登录服务器。只要只需要为存储库提供服务(为此,我们很乐意使用
hgwebdir.cgi
)。但是,我们还希望允许远程创建repo,而无需在服务器上维护附加/修补脚本,在客户端维护附加工具

需要明确的是:这个问题并不要求解决我们的特定问题,而是因为Mercurial本身不支持此功能的原因


更新


下面是对我所想到的情况的更技术性的描述。假定
hgwebdir.cgi
/path/to/repos
中的存储库集合提供服务,位于
https://.../repos
(已启用推送功能)。允许访问此URL(如Apache中配置的)的每个用户都可以拉入和推送更改集,这实际上意味着
hgwebdir.cgi
(因此
hg
)编辑并创建
/path/to/repos
下面的文件。现在,让
hgwebdir.cgi
也在
/path/to/repos
下创建新存储库的障碍是什么?

据我所知,没有一种SCM替代方案允许本地创建远程存储库。SVN、CVS、Git等

这通常是托管提供商的工作:SourceForge、Google代码、BitBucket。它们都在其授权基础设施之上实现了存储库的创建


例如,仅限于Debian开发人员,要创建一个新的存储库,您需要通过SSH登录到服务器,并在本地主文件夹上创建存储库,就像目录一样。

各种答案(包括您自己的答案)给出了一些很好的理由,说明为什么功能不存在(主要是关注点分离),但是,如果您真的想添加它,您可以只使用一两行shell。这里有一个我不久前给出的非常不安全的例子,展示了如何在高度信任的环境中添加该功能:

我认为原因是添加对创建存储库的支持将带来相当多的负担:

  • 如果您可以创建存储库,那么您希望能够删除它们。虽然这看起来很简单,但它离Mercurial正常工作的安全方式还有一大步——标准Mercurial中没有破坏性命令

  • 人们还希望编辑
    .hg/hgrc
    文件来设置描述和联系信息——标准Mercurial从不更改配置文件,因此这又是一件新鲜事

  • 人们还希望管理用户对新存储库的访问——这意味着编辑
    .htaccess
    文件或其他Web服务器的等效文件

。。。等等实现这个“小”特性将为许多额外的特性请求打开大门,而我们只有少数善变的开发人员也是精明的web开发人员


然而,现在有一个优秀的开源解决方案:为您提供一个“迷你Bitbucket”,您可以在自己的服务器上部署它。它将完成上述所有工作。如果我需要比普通
hgweb.cgi
更强大的东西,我会在我的服务器上安装它。它同时支持Mercurial和Git。

您自己不是已经给出了答案吗?整个web设置(尤其是权限)由apache管理,Mecurial不知道如何配置或扩展特定的apache设置。@Zarat:AFAIK
hgwebdir.cgi
在服务器端运行
hg
,然后在存储库中编辑/删除/创建文件(通常作为web服务器用户,例如www.data)。难道
hg
不应该在
config.web
中指定的目录中创建新的存储库吗(当然,由www-data所有)?好吧,我认为这是一个边缘案例,我昨天自己刚刚设置了一个多存储库服务器,您需要多个CGI来获得不同的权限。我想问题是服务器设置部分不在cgi/hg的职责范围内。我同意这是一个有用的特性。目前,我们在主服务器上创建repo的当前工作流程是(通过RDP)登录到主服务器,然后手动克隆开发人员正在提供的repo。我承认,这并不需要很长时间,但如果webdir应用程序能够通过网页公开某种方式来启动克隆操作,那就更好了。这样我们就不必担心让开发人员直接RDP访问我们的主服务器了。@Zarat:是的,我知道我们需要多个CGI来获得不同的权限。但是假定
hgwebdir.cgi
/some/path
https://.../repos
(启用推送),那么从技术上讲,允许每个有权访问此URL的人也在
/some/path
下面创建回购协议应该不是什么大问题,对吧,可以使用SSH:
hg clone/path/to/local/repo创建存储库ssh://host.org//absolute/path/repos/project
,因此远程创建repo的想法似乎被普遍接受。@Oben,通过SSH很容易,因为Hg具有完全的shell访问权限,在SSH shell上远程执行
Hg init
命令。通过HTTP执行同样的操作意味着增加协议的复杂性,需要实现自定义规则。对于一些可以通过其他方式轻松解决的问题来说,这太麻烦了。这与HTTP有什么不同,HTTP中
hgwebdir.cgi
也只运行
hg
(但是作为
$ hg clone /path/to/local/project https://host.org/repos/project