Mercurial – 设置存储库根目录?

我正在设置Mercurial存储库布局,并有一个包含所有存储库的目录。

/var/vcroot/link/[repository] 

由于SSH是我知道远程访问Mercurial的唯一方式,因此我知道如何设置公钥validation,并设置适当的环境variables。 我想知道的是有什么方法来设置存储库的根,所以用户可以input

 ssh://connection-name/repository-name 

而不是必须这样做:

 ssh://connection-name/var/vcroot/link/repository-name 

我想要一些像svn的-r选项。

这取决于用户是以自己的身份login还是以专用的Mercurial用户身份login。 如果你创build了一个专用的Mercurial用户,并通过密钥进行身份validation,那么你可以将Mercurial用户的主目录设置为/var/vcroot/link ,并且connection-name之后的单斜杠将与此相关。

请注意,由于同样的原因(即它应该是ssh://connection-name//var/vcroot/link/repository-name ),你的第二个例子将不起作用。

如果你有用户以自己身份login,那么每个用户将不得不创build一个到$HOME的符号链接才能工作。 或者,您可以使/hg符号链接到/var/vcroot/link ,并使用ssh://connection-name//hg/repository-name ,这可能足够短而方便。

回答你的问题的这一部分:

由于SSH是我知道远程访问Mercurial的唯一方式

您也可以通过http / https远程访问mercurial。

我通过创build一个shell脚本/ usr / local / bin / hg来解决这个问题:

 #!/bin/sh cd /var/vcroot/link /usr/bin/hg $* 

如果远程运行'hg init ssh:// connection-name / repository-name',则会在/ var / vcroot / link / repository-name中创build存储库,并按预期克隆和推送工作。 我还没有testing其他东西。

我喜欢将主目录更改为/var/vcroot/link的想法,但如果他们使用不同的用户名login,则无法工作。

你可以build议你的用户,他们为你的服务器设置了一个特殊的scheme。 标准的scheme扩展可以让你做到这一点。 他们应该补充

 [extensions] schemes = [schemes] server = ssh://connection-name//var/vcroot/link/ 

到一个configuration文件,然后他们可以做

 $ hg clone server://repository-name 

代替

 $ hg clone ssh://connection-name//var/vcroot/link/repository-name 

如果你可以控制他们的机器,那么你甚至可以在/etc/mercurial/hgrc文件中启用和configuration扩展,使其成为一个系统范围的设置。