我在自定义端口上运行可通过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
我研究了这个主题并找到了以下选项:
~/.ssh/config
文件中(最后的解决方法而不是解决方案)。git-daemon
并指定其--base-path
参数(仍然是一种解决方法......)gitosis
或gitolite
之类的实用程序 - 但仅仅将其用于此目的不是一种过度杀伤吗? Gitosis已经停产,gitolite是一个非常庞大的软件...... 我想要的只是一个带有自定义端口的“更漂亮”的SSH URL(因此我可以分发整个git clone
命令,并且远程用户不需要任何其他命令)。在我的案例中,上述哪一种解决方案最可行?
答案 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
表示法。也就是说,您尝试做的事情并不总是错误的。