git clone 失败,并显示 "index-pack" 失败?

56

所以我创建了一个非空仓库(因为我需要redmine能够读取它),并设置为与组共享(所以使用git init --shared=group命令)。我能够将更改推送到远程仓库,现在我正在尝试克隆它。

如果我通过网络克隆它,我会得到这个错误信息:

remote: Counting objects: 4648, done.
remote: Compressing objects: 100% (2837/2837), done.
error: git-upload-pack: git-pack-objects died with error.B/s  
fatal: git-upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF
fatal: index-pack failed

我能够在本地克隆它而没有问题,我运行了“git fsck”,只报告一些悬空的树/ blob,我的理解是这并不是问题所在。什么原因导致这种情况?我仍然可以从它拉取,只是无法克隆。值得注意的是,远程git版本为1.5.6.5,而本地版本为1.6.0.4。

我尝试克隆存储库的本地副本,剥离.git文件夹并推送到新的存储库,然后克隆新的存储库,我收到相同的错误,这使我相信可能是存储库中的某个文件导致了git-upload-pack失败......

编辑: 我在存储库中有许多Windows二进制文件,因为我刚刚构建了Python模块,然后将它们放在那里,以便其他人不必也构建它们。如果我删除Windows二进制文件并推送到新存储库,则可以再次克隆,也许这可以提供线索。现在正试图缩小导致问题的确切文件。


似乎是Cygwin的一个bug,如果重试可能会解决。 - Guruprasad GV
只是作为信息提供:本地克隆只做硬链接,因此可能不会执行“index-pack”或检查错误。 - J-16 SDiZ
是的,重试一下,也许会成功...在我的情况下,似乎使用https失败的几率较小。 - Gabo Esquivel
我也收到了完全相同的错误消息。除此之外,还有数十个以下的,全部都是重复的:“error:packfile .git/objects/pack/pack-5f2b4b46e2dba195a0fa5d29dfd3cef88067f8ed.pack与索引不匹配”和“warning:”+相同的“pack”消息+“无法访问”。只有从特定机器克隆时才会发生这种情况。或者,在它失败后,尝试拉取也会发生。后来我们似乎可以继续尝试,直到最终完成。从那个存储库克隆的任何其他机器都没有问题。win服务器是裸机,所有机器都是带cygwin的Windows。 - cregox
如果您的计算机上有多个物理驱动器,请尝试在另一个驱动器上进行克隆。 - Beachhouse
在Windows 10上,如果您使用AVG防病毒软件,请尝试禁用AVG。(已测试过avg Feb/2019和git for windows 2.20.0) - Martin
12个回答

21

我解决这个问题的方法是:我的git守护程序在Windows上运行,而客户端在其他计算机上。

我找到了一个解决方法(但它只适用于Windows)。

从cmd.exe以详细模式启动git守护进程:

"C:\Program Files\Git\bin\sh.exe" --login -i -c 'git.exe daemon --verbose  '

在git bash中直接使用尚未测试,也许可以。

然后(在开始任何clone、pull、fetch等操作之前),在git daemon运行的窗口中选择一些文本(注意:必须启用“快速编辑模式”(可在cmd.exe中找到-->属性(单击cmd窗口的左上角)-->编辑选项))。这将防止它在该窗口中打印任何进一步的消息。

当git daemon的输出线程被阻塞时,就不会发生错误。


3
很奇怪,但这对我也起作用了。
  1. 在Windows上运行git bash
  2. 启动守护进程(git daemon --verbose --export-all --reuseaddr --base-path=.)
  3. 选中一些文本(在bash shell中的系统菜单->编辑->标记)
  4. 让文本保持选中状态(不要按回车键),守护进程就可以正常工作!否则客户端会出现早期EOF错误。
- codeSF
1
获取最近版本的 Git 的替代方法涉及以下步骤:1. 右键单击;2. 打开选项窗口(在拉取时保持其打开状态..... :( )。 - goofballLogic
简直不敢相信...这样做让它工作了,但我必须使用Windows命令提示符,而不是Git-bash。我的没有“编辑”菜单@codeSF说的那样。而且像@goofballLogic说的那样保持选项窗口打开也不起作用(Windows 10)。 - elysch
2
这在我的Windows 10上标准命令行(shell) (cmd.exe)中有效。只需点击窗口图标,选择编辑->标记并选择一些文本。非常奇怪。 - N Jones
有人遇到过这种行为的解释吗?这绝对是某种错误。它是否与打印的“无法设置SO_KEEPALIVE”错误消息有关? - Derek Greer
似乎这个问题从未得到解决,即使是F5和网络也无法确定原因。它只发生在一个VPN配置文件上。 - Annadate Piyush

14

我和你一样遇到了同样的问题;当我克隆i时出现了错误消息:

Cloning into test...
remote: Counting objects: 6503, done.
remote: Compressing objects: 100% (4519/4519), done.
Connection to git.myhost.im closed by remote host.| 350 KiB/s
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
在我的情况下,问题出在我的仓库大小为200M,大于我的git服务器内存大小(128M)。当我从git服务器进行克隆时,在我的服务器上使用命令top显示内存使用很快就超过了128M。
当我使用另一台有4G内存的服务器时,git clone就没问题了。您也可以尝试为服务器添加更多的交换空间。

7
将以下内容添加到 .gitconfig 文件中可解决问题: [core] packedGitLimit = 512m packedGitWindowSize = 512m [pack] deltaCacheSize = 2047m packSizeLimit = 2047m windowMemory = 2047m注意,这里的换行是显而易见的。 - Dimitar Christoff

4

我在 SLES 12 SP3 上使用 git 2.13 克隆 github.com 上的仓库时遇到了问题。尝试将 git 升级到最新版本(当时是 v2.21),但这并没有解决该问题。尝试了推荐的 git 配置选项以及其他许多选项,但都没有成功。

最后,我手动完成了这个过程:

  • 手动创建目录:mkdir somedir
  • 运行 git init 命令,设置目录进行 GIT 配置。
  • 手动添加 Github 仓库作为来源:git remote add origin http://github.com/git/git
  • 运行 git fetch 命令获取打包文件。该任务失败并出现错误,但在 .git/objects/pack/tmp_pack_XXXXXX 中留下了已提取的但不完整的打包文件。
  • 使用 cat .git/objects/pack/tmp_pack_XXXXXX | git unpack-objects -r 命令提取所有有效对象。
  • 再次运行 git fetch 命令来获取之前尝试中未获取的任何内容(如分支和标签)。因为它们都已经被提取了,所以无需 pack/objects。
  • 最后,使用 git checkout master 命令,将 HEAD 指向实际的内容。

我不确定是否需要,但建议在完成后运行 git fsckgit gc 命令,这也会触发 git 重新创建打包文件和索引。


4

我遇到了同样的问题。 我的猜测也是因为我使用text/CRLF模式创建文件导致的。 确实,在将CygWin切换到UNIX/binary newline模式之后,一切正常。

请参见:

顺便说一下,我最简单的切换文件模式的方法是编辑/etc/fstab 从

none /cygdrive cygdrive text,posix=0,user 0 0

改为

none /cygdrive cygdrive binary,posix=0,user 0 0


3

我也遇到了cygwin git的问题,错误信息为:fatal: index-pack failed

我通过创建一个挂载点并将其设置为二进制模式来解决了这个问题。因为我的/c是以文本模式设置的。

将cygwin添加到/etc/fstab中:

c:/work/Projects /projects some_fs binary 0 0

运行mount -a以挂载所有驱动器。

您需要在/projects目录下才能使用cygwin git/c/work/Projects将失败。

不确定这是否适用于您。


2
我有同样的问题,我想要更改我的git配置为以下内容,它可以正常工作:

git config --global pack.packSizeLimit 50m
git config --global pack.windowMemory 50m
git config --global core.compression 9


2

使用 GIT_TRACE 环境变量来获得调试输出。将其设置为 "1" 可以跟踪到标准错误输出,或者设置为绝对路径可以跟踪到文件。


1
在我的情况下,Windows Defender阻止了git访问文件,因为我打开了勒索软件保护的受控文件夹访问。 将git 添加到这里(屏幕截图)以允许访问就可以解决问题。

1
欢迎来到StackOverflow,请更详细地描述您的答案,以便其他人能够轻松理解。 - Nensi Kasundra

0

我曾经遇到过类似的问题,但在这些帖子中没有看到适用于我的情况的解决方案。

在我的情况下,问题出在防火墙上。克隆小型存储库仍然可以工作,但更大的存储库则失败了。因此,如果其他方法都无效,检查防火墙设置是值得一试的。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接