致命:协议错误:线路长度不良字符:Unab

时间:2012-03-12 03:05:51

标签: git ssh repository

我有一个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和隧道协议。

4 个答案:

答案 0 :(得分:4)

答案 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在服务器上运行:

     
      
  1. 如果还没有完成,请在服务器上安装msysgit(我建议将其直接安装到C:\ Git或至少安装一个路径   没有空格,因为我有“间隔”路径的一些奇怪的问题)

  2.   
  3. 将C:\ Git \ bin添加到PATH变量。这是非常重要的!! sh.exe和其他依赖项都在此文件夹中

  4.   
  5. 现在转到C:\ Git \ bin并添加以下两个文件

  6.         

    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   但那不是很优雅。

         

    清理事物:

         
        
    1. 首先,我们希望通过指定远程别名
    2. 来摆脱整个repo路径         

      git remote add origin ssh://username@server/path/to/myrepo.git其中   “origin”将是别名

           
          
      1. 接下来我们为git-upload-pack和git-receive-pack设置配置,这样我们就不必一直引用shell脚本了。
      2.         

        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个字符。