Mercurial - 设置存储库根?

Mercurial - 设置存储库根?

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

/var/vcroot/link/[repository]

由于 SSH 是我所知道的远程访问 Mercurial 的唯一方法,我知道如何设置公钥身份验证,以及如何设置适当的环境变量。我想知道是否有任何方法可以设置存储库根目录,以便用户只需键入

ssh://connection-name/repository-name

与必须这样做相反:

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

我想要类似 svn 的 -r 选项的东西。

答案1

这取决于用户是以自己的身份登录,还是以专用 Mercurial 用户的身份登录。如果您创建专用 Mercurial 用户并通过密钥进行身份验证,则可以将 Mercurial 用户的主目录设置为/var/vcroot/link,后面的单斜杠connection-name将与该目录相关。

请注意,由于同样的原因,您的第二个示例由于缺少斜线而无法运行(即应该是ssh://connection-name//var/vcroot/link/repository-name)。

如果用户以自己的身份登录,则每个用户都必须创建一个符号链接$HOME才能正常工作。或者,您可以创建/hg一个符号链接/var/vcroot/link,并使用ssh://connection-name//hg/repository-name,这可能足够短,方便使用。

答案2

回答你问题的这部分:

因为 SSH 是我所知道的唯一可以远程访问 Mercurial 的方法

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

答案3

我通过创建 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 中创建,并且克隆和推送工作按预期进行。不过我还没有测试其他任何东西。

答案4

我喜欢将主目录更改为的想法/var/vcroot/link,但如果他们使用不同的用户名登录,那么这将行不通。

你可以建议你的用户为你的服务器设置一个特殊的方案。标准方案计划扩展让你做到这一点。他们应该添加

[extensions]
schemes =

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

到配置文件然后他们可以做

$ hg clone server://repository-name

代替

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

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

相关内容