我正在自定义端口(假设为 12345)上运行可通过 SSH 访问的 git 存储库服务器。我发现在这种情况下,需要使用 SSH 语法指定存储库 URL:
git clone ssh://[email protected]:12345/absolute/path/to/repository
我想以这样的方式设置它,用户可以在不指定 absolute 路径的情况下克隆存储库。
git clone ssh://[email protected]:12345/repository.git
我研究了这个主题并发现了以下选项:
~/.ssh/config
文件中(最后的解决方法,而不是解决方案)。git-daemon
并指定其 --base-path
参数(仍然是一个解决方法...)gitosis
或 gitolite
这样的实用程序 - 但仅将其用于此目的会不会太过分了? Gitosis 已经停产了,gitolite 是一个相当庞大的软件......我想要的只是一个带有自定义端口的“更漂亮”的 SSH URL(这样我就可以分发整个
git clone
命令,并且不需要远程用户提供任何其他信息)。对于我的情况,上述解决方案中哪一种最可行?
如果您使用远程规范的替代形式,则不需要绝对路径。 例如...
ssh
...将克隆相对于我的主目录的存储库
git clone [email protected]:repos/myrepo.git
,尽管这不允许使用备用端口。 但是,您也可以使用任一形式的
repos/myrepo.git
来指示用户的主目录,例如:~
顺便说一下,尽管已经停产,但
git clone ssh://[email protected]:12345/~/repository.git
的功能还是相当不错的,而且代码既小又容易理解。 它提供了一组有用的访问控制和存储库的自助管理。 我不会完全打折。
创建一条类似
的路径gitosis
放置 git 项目的位置
接下来创建一个到主页的符号链接:
/srv/git
接下来你可以有更短的链接
ln -s /srv/git $HOME
如果你有一个项目,你可以去掉 url 中的 git/ 部分
git clone user@server:git/myproject.git
下一个
ln -s /srv/git/myproject.git $HOME
会起作用的。 当然,URL 末尾的 .git 仅来自创建名称中包含 .git 的裸文件。 另请注意,不需要 ssh:// 部分:@ 表示它是 git 的 ssh URL。
更新:让我添加一个旁注:遵循最新的
文件系统层次结构标准我现在使用git clone user@server:myproject.git
作为存储库位置。
我只是想补充一点,这似乎是一个特定于版本的更改,尽管我不确定它是客户端还是服务器/存储库持有者端:我有一个
/srv/git
文件,其中包含很多 URL,例如:
.git/config
当我在 2010 年设置它们时,它们都可以工作,并且在我上次使用这些遥控器时(2016 年左右)仍然可以工作。
现在,在 2.18.0 版本上,这些不起作用,我需要使用
[remote "bob"]
url = ssh://ME@MACHINE<strong>/~ME</strong>/repositories/REPO.git
fetch = +refs/heads/*:refs/remotes/bob/*
或
:/~ME/foo
表示法。这就是说,您尝试做的事情并不总是错误的。