Git存储库URL - 没有绝对路径的SSH语法

时间:2013-01-15 23:30:44

标签: git ssh

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

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

我想以这样一种方式设置它,即用户可以克隆存储库而不指定绝对路径。

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

我研究了这个主题并找到了以下选项:

  1. 从网址中删除自定义端口,并让用户将其添加到~/.ssh/config文件中(最后的解决方法而不是解决方案)。
  2. 删除SSH并使用git-daemon并指定其--base-path参数(仍然是一种解决方法......)
  3. 使用gitosisgitolite之类的实用程序 - 但仅仅将其用于此目的不是一种过度杀伤吗? Gitosis已经停产,gitolite是一个非常庞大的软件......
  4. 我想要的只是一个带有自定义端口的“更漂亮”的SSH URL(因此我可以分发整个git clone命令,并且远程用户不需要任何其他命令)。在我的案例中,上述哪一种解决方案最可行?

3 个答案:

答案 0 :(得分:71)

如果您使用备用形式的ssh网址,则不需要绝对路径。例如......

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

...将克隆存储库repos/myrepo.git相对于我的主目录,尽管这不允许使用备用端口。但是,您也可以使用任何一种形式的~来指示用户的主目录,例如:

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

顺便提一下,尽管已经停止使用,gitosis功能相当不错,而且代码既小又容易理解。它提供了一组有用的访问控制和存储库的自助服务管理。我不会完全打折它。

答案 1 :(得分:5)

我这样做,不完全是你问的问题,而是关闭和更漂亮的链接:

创建一个类似

的路径
/srv/git 

你在哪里放置git项目

接下来是家的象征性链接:

ln -s /srv/git $HOME

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

git clone user@server:git/myproject.git

如果您有一个项目,您可以删除网址中的git / part

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

git clone user@server:myproject.git

会奏效。 当然,URL末尾的.git只来自于在名称中创建带有.git的裸。 另请注意,不需要ssh:// part:@暗示它是git的ssh URL。

更新:让我添加一个旁注:跟随最近的Filesystem Hierarchy Standard我现在使用/srv/git作为存储库位置。

答案 2 :(得分:0)

我不确定这是否真的可以作为一个完整的答案,但是我厌倦了使用注释特定的格式设置规则。我来说:

我只想补充一点,这似乎是特定于版本的更改,尽管我不确定是客户端还是服务器/回购方:我有一个.git/config文件,其中包含很多像这样的网址:

[remote "bob"]
    url = ssh://ME@MACHINE<strong>/~ME</strong>/repositories/REPO.git
    fetch = +refs/heads/*:refs/remotes/bob/* 

当我在2010年设置它们时,它们都工作了,直到2016年左右我最后一次使用这些遥控器时,它们仍在工作。

现在,在2.18.0版中,这些功能无效,我需要使用:/~ME/foo:/~/foo表示法。也就是说,您尝试做的事情并不总是错误的。