git clone失败,“index-pack”失败了吗?

问题描述 投票:47回答:12

所以我创建了一个不是裸的远程仓库(因为我需要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

我尝试克隆我的本地副本的repo,剥离.git文件夹并推送到一个新的repo,然后克隆新的repo,我得到相同的错误,这让我相信它可能是repo中的一个文件导致git-upload-pack失败...

编辑:我在repo中有一些windows二进制文件,因为我只是构建了python模块,然后将它们放在那里,所以其他人也没有必要构建它们。如果我删除windows二进制文件并推送到一个新的repo,我可以再次克隆,也许这给了一个线索。试图缩小目前导致问题的确切文件。

git clone
12个回答
21
投票

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

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

从cmd.exe启动详细信息启动git守护程序:

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

未经测试,如果它直接在git bash中工作。也许会的。

然后(在开始任何克隆,拉,取,...之前)在窗口中选择一些文本(注意:必须启用“快速编辑模式”(可在以下位置找到:cmd.exe - >属性(单击左上角)您的cmd窗口的一角) - >编辑选项))git守护程序在其中运行。这将阻止它在该窗口中打印任何进一步的消息。

当git守护程序的输出线程被阻塞时,则不会发生错误


0
投票

我有这个问题或接近它,但没有在任何这些线程中看到我的案例的解决方案。

在我的情况下,问题是防火墙。克隆小型存储库仍然有效,但更大的存储库失败了。因此,如果没有其他帮助,防火墙设置值得一试。


0
投票

我遇到了这个问题,从github.com克隆了一个github存储库,在SLES 12 SP3上运行git 2.13。尝试将git升级到最新版本(当时为v2.21),但这并没有解决问题。尝试设置git配置选项建议,以及许多其他选项,没有运气。

最终,我手工完成了。

  • 手动创建目录.. mkdir somedir
  • Ran git init为GIT设置目录。
  • 手动添加github repo作为起源git remote add origin http://github.com/git/git
  • Ran git fetch抓住了包。此任务失败并出现错误,但在.git/objects/pack/tmp_pack_XXXXXX中留下了已提取但不好的包
  • 使用cat .git/objects/pack/tmp_pack_XXXXXX | git unpack-objects -r提取所有有效对象。
  • Ran git fetch再次得到任何东西(如分支和标签)从先前的尝试中遗漏。无需包装/物品,因为它们都已打开包装。
  • 最后,git checkout master,让HEAD指向真实的东西。

我不确定它是否需要我,但之后我会推荐git fsckgit gc,这也会触发git重新创建包/索引。


-1
投票

我通过修复文件夹权限解决了这个问题:

sudo chmod 777 -R Your_folder

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一切都还可以。您还可以尝试向服务器添加更多交换空间。


12
投票

“git gc”会抱怨吗?


4
投票

我有同样的问题。我的猜测是,这与我使用text / CRLF模式创建文件的事实有关。事实上,在将CygWin切换到UNIX /二进制换行模式后,一切正常。

看到:

BTW,我切换文件模式的最简单方法是编辑/ etc / fstab来切换

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

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


3
投票

使用GIT_TRACE环境变量来获取调试输出。将其设置为“1”以跟踪stderr或跟踪到文件的绝对路径。


3
投票

我也遇到过cygwin git的问题,错误:fatal: index-pack failed

我能够通过为我的项目创建一个mount并将其设置为二进制模式来解决它。因为我的/c设置为文本模式。

将cygwin添加到/etc/fstab

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

运行mount -a来安装所有驱动器。

你需要在/projects与cygwin git合作,/c/work/Projects将失败。

不确定这是否适合你。


0
投票

我将客户端计算机的git源升级到服务器运行的相同版本,并为我修复了这个问题。


0
投票

我有同样的问题,我会改变我的git配置,这是正常的:

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


0
投票

git-daemon问题似乎已在v2.17.0中得到解决(使用非工作版v2.16.2.1进行了验证)。即不再需要在控制台中选择文本以“锁定输出缓冲区”的解决方法。

来自https://github.com/git/git/blob/v2.17.0/Documentation/RelNotes/2.17.0.txt

  • 对“git守护程序”的各种修复。 (合并ed15e58efe jk / daemon-fixes稍后修复)。
© www.soinside.com 2019 - 2024. All rights reserved.