我有一个Windows 2008 R2 Server标准版。我和Git一起安装了FreeSSHd。 Windows防火墙的例外设置为端口22.我将SSH服务器设置为仅接受SSH公钥。我可以使用终端(即ssh gregory@hostname
)登录服务器。当我使用git clone
命令(例如git clone ssh://gregory@hostname/path_to_my_repo
)时,我收到此错误:
致命:协议错误:行长字符错误:Unab
我对于造成它的原因绝对不知所措。我启用了Shell,SFTP和隧道协议。
答案 0 :(得分:4)
忘记freeSSHd。它无法配置为使用git运行。
你有两个(据我所知)选择 - 使用更复杂的Windows服务器,然后实现这个: http://holyhoehle.wordpress.com/2011/01/26/setting-up-a-git-server-on-windows-server-2008-r2-using-msysgit-and-winsshd/
或使用OpenSSH(CopSSH)
http://java2cs2.blogspot.de/2010/03/setup-git-server-on-windows-machine.html
http://www.timdavis.com.au/git/setting-up-a-msysgit-server-with-copssh-on-windows/
Setup a Git server with msysgit on Windows
http://code.google.com/p/tortoisegit/wiki/HOWTO_CentralServerWindowsXP
答案 1 :(得分:2)
通过SSH的Git逐字使用SSH管道的输出。如果该输出包含与git无关的任何虚假数据,则git命令无法解析该数据并使用模糊的错误消息中止。例如,如果您有一个用户脚本在连接时显示内容,或者某些内容抛出了git无法理解的错误消息,则会发生这种情况。
你会注意到'Unab'看起来像'Unable'的开头,可能是一个错误信息,意味着一个人,而不是git,确实。
运行以下命令会发生什么?
ssh gregory@hostname git-upload-pack '/path_to_your_repo'
理论上,您应该收到以“Unable”开头的错误消息。例如,“无法找到git-upload-pack”。在这种情况下,修复将添加git-upload-pack到您的路径!
答案 2 :(得分:0)
我今天在工作中遇到同样的问题......所以我发现了这个:Setting up a Git Server on Windows Server 2008 R2
您需要看到的内容如下:
让Git在服务器上运行:
如果还没有完成,请在服务器上安装msysgit(我建议将其直接安装到C:\ Git或至少安装一个路径 没有空格,因为我有“间隔”路径的一些奇怪的问题)
将C:\ Git \ bin添加到PATH变量。这是非常重要的!! sh.exe和其他依赖项都在此文件夹中
- 醇>
现在转到C:\ Git \ bin并添加以下两个文件
gup.sh grp.sh 4.在您喜欢的编辑器中打开gup.sh并插入
C:/Git/libexec/git-core/git-upload-pack.exe $*
5.打开grp.sh并插入C:/Git/libexec/git-core/git-receive-pack.exe $ * $ *本质上 从存储库路径参数中删除单引号,所以a 其中包含空格的路径在这里不起作用我猜
基本上我们现在已经完成了,客户端的所有git操作都应该 工作。对于克隆,您必须键入
git clone -u 'sh gup.sh' ssh://username@server/path/to/myrepo.git
或者 推是
git push --exec 'sh grp.sh' ssh://username@server/path/to/myrepo.git
但那不是很优雅。清理事物:
- 首先,我们希望通过指定远程别名
来摆脱整个repo路径 醇>git remote add origin ssh://username@server/path/to/myrepo.git其中 “origin”将是别名
- 接下来我们为git-upload-pack和git-receive-pack设置配置,这样我们就不必一直引用shell脚本了。
醇>
git config remote.origin.uploadpack 'sh gup.sh'
和
git config remote.origin.receivepack 'sh grp.sh'
而已。现在我们可以使用普通的git命令而不需要任何其他参数:git clone origin git push origin master git pull origin ...
答案 3 :(得分:0)
就我而言,我有一个
echo $HOSTNAME
在我的.bashrc和.bash_profile中,我用来诊断一些连接问题。这给了我一个信息:
fatal: protocol error: bad line length character: [VSR
当我尝试从ssh回购中git pull
时。删除echo
语句会使事情起作用; “[VSR
”只是echo
中的前4个字符。