git clone 因“index-pack”失败而失败?
Posted
技术标签:
【中文标题】git clone 因“index-pack”失败而失败?【英文标题】:git clone fails with "index-pack" failed? 【发布时间】:2010-12-28 23:19:29 【问题描述】:所以我创建了一个 not 裸露的远程仓库(因为我需要 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 失败的 repo...
编辑: 我在 repo 中有许多 windows 二进制文件,因为我只是构建了 python 模块,然后将它们粘贴在那里,所以其他人也不必构建它们。如果我删除 Windows 二进制文件并推送到一个新的 repo,我可以再次克隆,也许这提供了一个线索。现在正在尝试缩小导致问题的确切文件范围。
【问题讨论】:
这似乎是cygwin的一个错误,如果你重试它可能会工作。 仅供参考,在本地克隆只是做硬链接,所以它可能不会做index-pack
或检查错误。
是的,重试,它可能会工作......在我的情况下,由于某种原因,它似乎在 https 上的故障较少
我收到了完全相同的错误消息。除了它还带来了以下几十个,全部重复,error: packfile .git/objects/pack/pack-5f2b4b46e2dba195a0fa5d29dfd3cef88067f8ed.pack does not match index
和 warning:
+ 相同的 'pack' msg + cannot be accessed
。仅在尝试从这台特定机器克隆时才会发生。或者,在它失败后,当试图拉它时也会发生。后来似乎我们可以继续尝试,直到它最终完成。从该存储库克隆的任何其他机器都没有问题。 win服务器是裸机,所有机器都是带有cygwin的windows。
如果您的计算机上有多个物理驱动器,请在其他驱动器上尝试克隆。
【参考方案1】:
我解决这个问题的方法是这样的:我的 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 daemon 的输出线程被这样阻塞时,则不会发生错误
【讨论】:
奇怪,但这也对我有用。 1. 在 Windows 上运行 git bash 2. 启动一个守护进程 (git daemon --verbose --export-all --reuseaddr --base-path=.) 3. 标记一些文本(系统菜单->编辑->标记bash shell) 4. 留下标记的文本(不要按回车键)并且守护程序可以正常工作(!),否则每次都会在客户端出现早期 EOF 错误。 所涉及的最新版本 git 的替代方法 1. 右键单击 2. 选项窗口(拉动时保持打开状态..... :( ) 不敢相信...这使它工作,但我必须使用 windows cmd,而不是 Git-bash。我的没有@codeSF 说的edit
菜单。并且像@goofballLogic所说的那样打开选项窗口也不起作用(Windows 10)
这在标准命令外壳 (cmd.exe) 中的 Windows 10 上对我有用。只需单击窗口图标,编辑->标记并选择一些文本。很奇怪。
有人解释过这种行为吗?这绝对是某种错误。它是否与打印的“无法设置 SO_KEEPALIVE”错误消息有关?【参考方案2】:
“git gc”会抱怨吗?
【讨论】:
我不知道怎么做,但首先运行该命令为我解决了这个问题。 这里一样,在git pull
修复问题之前运行git gc
没有帮助我:(【参考方案3】:
我和你有同样的问题;我克隆 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
一切正常。您也可以尝试为您的服务器添加更多交换空间。
【讨论】:
将此添加到.gitconfig
修复:[core] packedGitLimit = 512m packedGitWindowSize = 512m [pack] deltaCacheSize = 2047m packSizeLimit = 2047m windowMemory = 2047m
- 显然是换行符。【参考方案4】:
我遇到了同样的问题。 我的猜测也是,这与我对创建的文件使用文本/CRLF 模式这一事实有关。 事实上,在将 CygWin 切换到 UNIX/二进制换行模式后,一切正常。
见:
http://cygwin.com/cygwin-ug-net/using-textbinary.html http://www.sourceware.org/cygwin/cygwin-ug-net/using-utils.html#mount顺便说一句,我切换文件模式的最简单方法是编辑 /etc/fstab 切换到
无 /cygdrive cygdrive text,posix=0,user 0 0
到
无 /cygdrive cygdrive binary,posix=0,user 0 0
【讨论】:
【参考方案5】:我遇到了这个问题,从 github.com 克隆了一个 github 存储库,在 SLES 12 SP3 上运行 git 2.13。尝试将 git 升级到最新版本(当时是 v2.21),但这并没有解决问题。尝试设置建议的 git config 选项和许多其他选项,但没有成功。
最终,我是手工完成的。
手动创建目录..mkdir somedir
跑git init
为GIT设置目录。
手动添加 github repo 作为来源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
以获取之前尝试中遗漏的任何内容(如分支和标签)。无需打包/对象,因为它们都已解包。
最后,git checkout master
,让HEAD
指向真实的东西。
我不确定我是否需要它,但我会推荐 git fsck
和 git gc
之后,这也会触发 git 重新创建包/索引。
【讨论】:
【参考方案6】:使用GIT_TRACE
环境变量获取调试输出。将其设置为“1”以跟踪到标准错误或跟踪到文件的绝对路径。
【讨论】:
【参考方案7】:我也遇到了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
将失败。
不确定这是否适合您。
【讨论】:
【参考方案8】:我也有同样的问题,我会将我的 git 配置更改为,效果很好:
git config --global pack.packSizeLimit 50m git config --global pack.windowMemory 50m git config --global core.compression 9
【讨论】:
【参考方案9】:我将客户端计算机的 git 源升级到服务器正在运行的相同版本,并为我解决了这个问题。
【讨论】:
【参考方案10】:git-daemon 问题似乎已在v2.17.0 中得到解决(已通过不工作的 v2.16.2.1 验证)。 IE。不再需要在控制台中选择文本以“锁定输出缓冲区”的解决方法。
来自https://github.com/git/git/blob/v2.17.0/Documentation/RelNotes/2.17.0.txt:
对“git daemon”的各种修复。 (稍后将 ed15e58efe jk/daemon-fixes 合并到维护中)。
【讨论】:
【参考方案11】:我遇到了这个问题或接近它,但在任何这些线程中都没有看到我的案例的解决方案。
就我而言,问题是防火墙。克隆小型存储库仍然有效,但较大的存储库失败了。因此,如果没有其他帮助,防火墙设置值得一试。
【讨论】:
【参考方案12】:在我的例子中,Windows Defender 阻止了 git 对文件的访问,因为我打开了勒索软件保护的受控文件夹访问。 添加 git here (screenshot) 以允许访问就可以了。
【讨论】:
欢迎来到 ***,请描述您的答案,以便其他人更容易理解【参考方案13】:此错误可能会掩盖这些问题:
磁盘空间不足 内存不足如果带有 git 的实例内存不足,那么您可以尝试添加一个临时交换:
fallocate -l 2G /swap
chmod 600 /swap
mkswap /swap
swapon /swap
完成后:
swapoff /swap
rm -f /swap
【讨论】:
以上是关于git clone 因“index-pack”失败而失败?的主要内容,如果未能解决你的问题,请参考以下文章
使用ED25519算法生成SSH密钥,解决git clone报错:early EOF fetch-pack: invalid index-pack output
git clone时报错 提示 early EOF、The remote end hung up unexpectedly 、 index-pack failed等错误信息