如何通过Windows上的ssh停止git来解决错误的路径?

时间:2009-07-07 14:12:47

标签: windows git ssh msysgit git-clone

我有一个带有ssh服务器设置的Windows 2003框。我在本地和服务器上安装了msysgit(git版本1.6.2)。

服务器具有以下我的回购的绝对路径:

e:\vc\git\myrepo.git

当用户登录时,他/她将被放入以下工作目录:

e:\vc\git\

在我的开发机器上运行以下cmd:

git clone ssh://myuser@myip/myrepo.git testrepo

我收到以下错误:

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

根据我的ssh日志,git似乎正在服务器上执行此cmd:

'cmd.exe /c git-upload-pack '/myrepo.git''

由于同样的原因,在本地(在服务器上)执行该命令失败。我认为这个问题与git前缀为'/'的路径有关。我怎么告诉git不要这样做?这应该有效吗?

注意:git-upload-pack正在运行,因为我在路径中添加了\ gitinstallpath \ libexec \ git-core。显然这是一个错误,将来会修复,这是我的工作。

3 个答案:

答案 0 :(得分:6)

我通过将我的ssh服务器从winssh切换到openssh(通过cygwin层)解决了这个问题。我能够使用winsshd连接正常(如上所述),但是winsshd没有正确处理前缀为“/”的路径。我可能会让winsshd工作,但切换到cygwin和openssh的速度更快。

如果您遇到类似情况,可以使用good blog post来启动设置:

答案 1 :(得分:4)

您是否尝试过以下操作?

git clone ssh://myuser@myip/myrepo testrepo

请注意从SSH路径末尾删除“.git”。如果远程目录名具有后缀,则最后只需要该后缀。

另外,您是否尝试过任何其他SSH URL格式?要使用相对路径,您可以尝试:

git clone ssh://myuser@myip/~/myrepo testrepo

有关其他网址格式的详细信息,请参阅git clone man page

答案 2 :(得分:4)

如果有人仍然对解决方法感兴趣:

问题是 - cmd.exe不了解单引号参数。所以我们改用sh。

使用行

创建文件gup.sh
    git-upload-pack.exe $*  

和grp.sh with

    git-receive-pack.exe $*  

在服务器上!

然后运行:

    git clone -u 'sh gup.sh' ssh://myuser@myip/e/vc/git/myrepo.git testrepo  
    git config remote.origin.uploadpack 'sh gup.sh'  
    git config remote.origin.receivepack 'sh grp.sh'