最近在公司电脑clone某些gitlab仓库的时候总会碰到下面这个报错: fetch-pack: unexpected disconnect while reading sideband packet

按照网上和Gitlab的KM,搜索到四个解决方法:

  1. 关闭git压缩,这个应该是在host端的压缩 git config --global core.compression 0
  2. 仓库太大导致失败,控制每次克隆深度:
git clone --depth 1 <repo_URI>
git fetch --unshallow 

# or, alternately,
git fetch --depth=2147483647

# Now, do a regular pull:
git pull --all
  1. 修改其他git的参数(内存、缓存等)
[core] 
packedGitLimit = 512m 
packedGitWindowSize = 512m 
[pack] 
deltaCacheSize = 2047m 
packSizeLimit = 2047m 
windowMemory = 2047m
  1. 修改httpbuffer git config --global http.postBuffer 524288000

这四个方法基本无效,而且我看了一下失败的仓库大小,基本都是非常小的,而且没有特别大的提交,不可能因为缓存区不足的原因。而且我还是走ssh协议,方法4基本没有用。但是方法提示了我,有没可能是ssh协议本身的问题?于是在尝试用sourcetree clone成功后确定了这个问题。 sourcetree的git是跟命令相同版本,唯一的区别就是sourcetree使用了putty/plink作为ssh的传输命令,命令行是用系统的ssh(8.1.0.0p1-beta),从scoop安装的。

遂重新安装git for windows,使用安装包自带ssh和mintty后解决。我看全网似乎没有提到跟这个相关。当然你也可以选择putty/plink作为默认的ssh,不过为了不折腾还是用推荐的选项(毕竟用的人更多)。

我甚至怀疑之前其他仓库时不时出现pull失败是跟这个ssh相关(不过现在已经没办法证实了)

PS:自带的ssh没有办法使用windows的ssh-agent确实有点麻烦,要用mintty启动ssh-agent。