通过SSH从Stash克隆Git存储库

4

我在一个Stash服务器上运行了一个git仓库。通过http克隆该仓库是可以正常工作的。

git clone http://user@server:7990/a/b/sandbox.git

因为某种奇怪的原因,当我把http替换成ssh并且同时更改端口时,它会给我返回

git clone ssh://user@server:7999/a/b/sandbox.git
Cloning into sandbox...
fatal: remote error: Remote URL invalid
A repository could not be determined from the remote URL. Please confirm the
clone URL in Stash and try again. URL suffix: '/scm/ct/sandbox.git'
fatal: The remote end hung up unexpectedly

服务器开启了ssh并将端口设置为7999。为什么当通过ssh发送请求而不是http时,它找不到存储库呢?

2个回答

6
问题已解决。某种原因导致仓库的SSH-URL后缀与HTTP-URL后缀不同。在发现这一点后,问题得到了解决。
编辑:
Stash给我的http-url是user@server:7990/a/b/sandbox.git,而给我的ssh-url是user@server:7999/b/sandbox.git(其中a和b当然是占位符)。
正如评论中提到的,我应该将这个信息添加到我的答案中。

1
不同在哪里?按照现有的写法,这并不是一个答案(从你的问题来看,最好使用~/.ssh/config来适当配置SSH,并且只需使用git clone server:path/to/repo.git)。 - AD7six
Stash给我的http-url是user@server:7990/a/b/sandbox.git,而ssh-url则是user@server:7999/b/sandbox.git(其中ab当然是占位符)。 - Vince
似乎“a/b”部分在存储库和SSH之间有所变化: 对于存储库URL,它是存储库中的逻辑路径。例如, projects/_project_/repos/_reponame_。 对于SSH而言,它必须是文件系统中的常规目录路径。例如, /dev/scm/_reponame_ - Aelian
感谢您在这里留下答案。我遇到了同样的问题,但是不是/a/b,而是使用/b,实际上是/stash/scm,我必须同时删除它们才能使其正常工作并“找到”存储库。 - dragon788

1

配置ssh让它为您完成

除非明确写出克隆URL是可取的(例如,通过参数化脚本执行克隆),否则通常更容易配置ssh以便它了解何为server,因此命令参数只是您通常期望的默认值。因此,例如在您的ssh配置文件中放置:

Host server
  User user
  Port 7999

这随后允许:
$ git clone server:/a/b/sandbox.git

在这种情况下,特别是当Git服务器上有多个存储库时,这意味着您不需要记住克隆存储库的更复杂/明确的语法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接