我有一个带有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。显然这是一个错误,将来会修复,这是我的工作。
答案 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.shgit-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'