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

问题描述 投票:0回答:3

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

git clone ssh://[email protected]:12345/absolute/path/to/repository

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

git clone ssh://[email protected]:12345/repository.git

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

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

我想要的只是一个带有自定义端口的“更漂亮”的 SSH URL(这样我就可以分发整个

git clone
命令,并且不需要远程用户提供任何其他信息)。对于我的情况,上述解决方案中哪一种最可行?

git ssh
3个回答
92
投票

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

ssh

...将克隆相对于我的主目录的存储库
git clone [email protected]:repos/myrepo.git

,尽管这不允许使用备用端口。 但是,您也可以使用任一形式的

repos/myrepo.git
来指示用户的主目录,例如:
~

顺便说一下,尽管已经停产,但
git clone ssh://[email protected]:12345/~/repository.git

的功能还是相当不错的,而且代码既小又容易理解。 它提供了一组有用的访问控制和存储库的自助管理。 我不会完全打折。

    


6
投票

创建一条类似

的路径

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 作为存储库位置。

    


1
投票

我只是想补充一点,这似乎是一个特定于版本的更改,尽管我不确定它是客户端还是服务器/存储库持有者端:我有一个

/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
表示法。这就是说,您尝试做的事情并不总是错误的。
    

© www.soinside.com 2019 - 2024. All rights reserved.