65

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

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

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

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

我研究了该主题并发现了以下选项:

  1. 从 URL 中删除自定义端口并让用户将其添加到他们的~/.ssh/config文件中(最后的解决方法,而不是解决方案)。
  2. 删除 SSH 并使用git-daemon并指定其--base-path参数(仍然是一种解决方法......)
  3. 使用类似gitosisor的实用程序gitolite- 但仅将其用于此目的不是矫枉过正吗?Gitosis 已停产,gitolite 是一个相当庞大的软件......

我想要的只是一个带有自定义端口的“更漂亮”的 SSH URL(这样我就可以分发整个git clone命令,而无需远程用户提供任何其他内容)。在我的情况下,上述哪种解决方案最可行?

4

3 回答 3

81

如果您使用sshURL 的替代形式,则不需要绝对路径。例如...

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

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

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

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

于 2013-01-16T00:04:22.957 回答
7

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

创建一条路径

/srv/git 

放置 git 项目的位置

接下来创建一个指向主页的符号链接:

ln -s /srv/git $HOME

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

git clone user@server:git/myproject.git

如果您有一个项目,您可以摆脱 git/ 网址中的部分

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

下一个

git clone user@server:myproject.git

将工作。当然,URL 末尾的 .git 仅来自创建名称中带有 .git 的裸文件。另请注意,不需要 ssh:// 部分:@ 表示它是 git 的 ssh URL。

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

于 2016-10-03T21:59:04.610 回答
1

我不确定这是否真的值得成为一个完整的答案,但我厌倦了与特定于评论的格式规则作斗争。我来说:

我只想补充一点,这似乎是一个特定于版本的更改,尽管我不确定它是客户端还是服务器/存储库持有者端:我有一个.git/config包含很多 URL 的文件,例如:

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

当我在 2010 年设置它们时,它们都可以正常工作,并且在我最后一次使用这些遥控器时仍在工作,大约是 2016 年左右。

现在,在 2.18.0 版本上,这些都不起作用,我需要使用:/~ME/fooor:/~/foo表示法。也就是说,你试图做的事情并不总是错的。

于 2020-02-05T19:31:52.297 回答