我正在设置 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
使其成为系统范围的设置。