为什么Git命令在Windows 10上通过Win32-OpenSSH失败?

时间:2018-02-04 00:21:40

标签: windows git ssh

我在Windows 10系统上设置了Win32-OpenSSH,我正在使用Git for Windows 2.16.1。 我已经创建了一个裸测试存储库,我可以通过文件URL从中轻松克隆:

git clone file:///c:/test.git
Cloning into 'test'...
remote: Counting objects: 33, done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 33 (delta 11), reused 0 (delta 0)
Receiving objects: 100% (33/33), done.
Resolving deltas: 100% (11/11), done.

SSHD运行正常,我可以从我的平板电脑打开一个shell,并通过SFTP访问存储库目录:

> sftp oli@localhost
oli@localhost's password:
Connected to oli@localhost.
sftp> pwd
Remote working directory: /C:/Users/Oli
sftp> cd /c:/test.git
sftp> pwd
Remote working directory: /c:/test.git
sftp> ls
HEAD  config  description  hooks  info  objects  packed-refs  refs
sftp> bye

但是由于某种原因,通过SSH克隆失败了:

> git clone ssh://oli@localhost:22/c:/test.git
Cloning into 'test'...
oli@localhost's password:
fatal: ''/c:/test.git'' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

用户“Oli”肯定拥有正确的访问权限,我们上面已经看到存储库存在并且是一个有效的Git存储库。我还在路径上尝试了许多不同的语法变体 我已经在Git / SSH / Windows,Git Pro书籍,Git参考书,OpenSSH手册和Win32-OpenSSH维基上阅读了每一个Q / A.

我错过了什么?

1 个答案:

答案 0 :(得分:2)

Konstantin this question已对此进行了解答(感谢您的链接,Aurel):

  

问题是 - cmd.exe不理解单引号参数。

Git将路径传递到用单引号括起来的存储库,这在cmd.exe中不起作用 如果你看得足够近,实际上可以在上面的Git错误消息中看到:

fatal: ''/c:/test.git'' does not appear to be a git repository

所以我已经设置了Konstantin建议的解决方法:

  • 在服务器上的主目录中创建shell脚本gup.sh和grp.sh,每个脚本包含单行git-upload-pack.exe $* resp。 git-receive-pack.exe $*
  • 在初始克隆操作中使用参数-u'sh gup.sh'(在cmd.exe中执行此操作时,请使用双引号...)
  • 使用命令git config remote.origin.uploadpack 'sh gup.sh'git config remote.origin.receivepack 'sh grp.sh'
  • 配置克隆的存储库

......它有效。

可悲的是,康斯坦丁的答案不是被接受的答案,也是最不受欢迎的答案。所以,如果这对你有所帮助,也可以回答他的答案!