Git存储库URL – 没有绝对path的SSH语法

我正在运行一个可以通过SSH访问的git仓库服务器,在一个自定义的端口上(比如说12345)。 我发现在这种情况下,需要使用SSH语法指定存储库URL:

git clone ssh://login@server.com:12345/absolute/path/to/repository 

我想以这样的方式设置它,以便用户克隆存储库而不指定绝对path。

 git clone ssh://login@server.com:12345/repository.git 

我已经研究了这个话题,发现了以下选项:

  1. 从URL中删除自定义端口,并使用户将其添加到~/.ssh/config文件(最后一种解决方法,而不是解决scheme)。
  2. 删除SSH并使用git-daemon并指定它的--base-path参数(仍然是一个解决方法…)
  3. 使用像gitosisgitolite这样的工具 – 但是仅仅为了这个目的而使用它会不会是一种矫枉过正? Gitosis已经停产,gitolite是一个相当庞大的软件…

我只需要一个带有自定义端口的“漂亮的”SSH URL(这样我就可以分发整个git clone命令,而且不需要远程用户)。 对我而言,哪一种解决scheme最可行?

如果使用ssh URL的替代forms,则不需要绝对path。 例如…

 git clone lars@myserver.example.com:repos/myrepo.git 

…将相对于我的主目录克隆版本库repos/myrepo.git ,尽pipe这不允许使用备用端口。 但是,您也可以使用~以任一forms指示用户的主目录,例如:

 git clone ssh://login@server.com:12345/~/repository.git 

顺便说一句,尽pipe停药, gitosisfunction相当好,代码是小而易于理解。 它为存储库提供了一套有用的访问控制和自助服务pipe理。 我不会完全打折。

我这样做,并不完全是你问的,而是closures和漂亮的链接:

创build一个像

 /srv/git 

你把你的git项目

然后做一个象征性的链接到家:

 ln -s /srv/git $HOME 

接下来你可以有更短的链接

 git clone user@server:git/myproject.git 

如果你有一个项目,你可以摆脱url中的git / part

 ln -s /srv/git/myproject.git $HOME 

下一个

 git clone user@server:myproject.git 

将工作。 当然,URL末尾的.git只能通过名称中的.git创build。 还要注意,不需要ssh://部分:@意味着它是git的ssh URL。

更新:让我添加一个旁注:按照最新的文件系统层次结构标准,我现在使用/srv/git作为存储库位置。