我在谷歌上搜索过,找到了很多解决方案,但没有一个适合我。

我试图通过连接到LAN网络中的远程服务器从一台机器克隆。 在另一台机器上运行此命令会导致错误。 但是使用git运行相同的克隆命令://192.168.8.5…在服务器上,这是正常的并且成功的。

有什么想法吗?

user@USER ~
$ git clone  -v git://192.168.8.5/butterfly025.git
Cloning into 'butterfly025'...
remote: Counting objects: 4846, done.
remote: Compressing objects: 100% (3256/3256), done.
fatal: read error: Invalid argument, 255.05 MiB | 1.35 MiB/s
fatal: early EOF
fatal: index-pack failed

我已经在.gitconfig中添加了这个配置,但也没有帮助。 使用git版本为1.8.5.5.2 .msysgit.0

[core]
    compression = -1

当前回答

此错误可能发生在git的内存需求。您可以将这些行添加到全局git配置文件中,即$USER_HOME中的.gitconfig,以解决这个问题。

[core] 
packedGitLimit = 512m 
packedGitWindowSize = 512m 
[pack] 
deltaCacheSize = 2047m 
packSizeLimit = 2047m 
windowMemory = 2047m

其他回答

如果你在Windows上,你可能想检查git克隆失败的“index-pack”失败?

基本上,在运行git.exe守护进程之后…命令,从控制台窗口中选择一些文本。重试拉/克隆,它现在可能工作了!

更多信息请看这个答案。

最终通过git配置——global core.compression解决

来自BitBucket问题线程:

我试了差不多五次,还是会这样。 然后我尝试使用更好的压缩,它工作! Git配置——global core.compression

从Git文档:

core.compression 整数-1..9,表示默认压缩 的水平。-1是zlib的默认值。 0表示不压缩,1..9是 各种速度/大小的权衡,9是最慢的。 如果设置,这将提供一个 默认为其他压缩变量,如core.looseCompression 和pack.compression。

与此相关,仅在没有根访问权限并手动从RPM(使用rpm2cpio)或其他包(.deb, ..)中提取Git到子文件夹时有用。典型的用例:您尝试在公司服务器上使用更新版本的Git而不是过时版本的Git。

如果git克隆失败,导致fatal: index-pack失败,但没有早期的EOF提示,而是提示使用:git index-pack的帮助消息,说明版本不匹配,你需要使用——exec-path参数运行git:

git --exec-path=path/to/subfoldered/git/usr/bin/git clone <repo>

为了让这个过程自动发生,在~/.bashrc中指定:

export GIT_EXEC_PATH=path/to/subfoldered/git/usr/libexec

我得到了同样的错误, 在我这边,我通过运行这个命令来解决,在windows中它有一些内存问题。

git config --global pack.windowsMemory 256m

正如@ingyhere所说:

浅克隆

首先,关闭压缩:

git config --global core.compression 0

接下来,让我们做一个部分克隆来截断下来的信息量:

git clone --depth 1 <repo_URI>

当它工作时,进入新目录并检索克隆的其余部分:

git fetch --unshallow

或者,或者,

git fetch --depth=2147483647

现在,拉一下:

git pull --all

然后解决你本地分支只跟踪主的问题

在您选择的编辑器中打开git配置文件(.git/config)

上面写着:

[remote "origin"]
    url=<git repo url>
    fetch = +refs/heads/master:refs/remotes/origin/master

换线

fetch = +refs/heads/master:refs/remotes/origin/master

to

fetch = +refs/heads/*:refs/remotes/origin/*

做一个git取回和git将拉你所有的远程分支现在