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

时间:2009-12-22 02:56:44

标签: git clone

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

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

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

14 个答案:

答案 0 :(得分: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守护程序的输出线程被阻塞时,则不会发生错误

答案 1 :(得分: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一切正常。您还可以尝试向服务器添加更多交换空间。

答案 2 :(得分:12)

“git gc”会抱怨吗?

答案 3 :(得分: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

答案 4 :(得分: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才会失败。

不确定这是否适合您。

答案 5 :(得分:3)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

我遇到同样的问题,我会改变我的git配置,这样做很好:

  

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

答案 8 :(得分: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稍后修复)。
  •   

答案 9 :(得分:0)

我有这个问题或接近这个问题,但是在任何这些线程中都看不到我的情况的解决方案。

就我而言,问题是防火墙。无论如何,克隆小型存储库都是可行的,但是大型存储库却失败了。因此,如果没有其他帮助,则值得检查防火墙设置。

答案 10 :(得分:0)

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

最终,我是手工完成的。

  • 手动创建目录。.const object: MyCustomString = 'some value'
  • 运行mkdir somedir来设置GIT的目录。
  • 手动将github存储库添加为来源git init
  • 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指向真实事物。

我不确定我是否需要它,但是之后我建议使用HEADgit fsck,它们也会触发git重新创建包/索引。

答案 11 :(得分:0)

就我而言,Windows Defender阻止了git对文件的访问,因为我已打开Ransomware Protection的“受控文件夹”访问权限。 添加git here (screenshot)以允许访问即可达到目的。

答案 12 :(得分:0)

这个错误可能会掩盖这些问题:

  • 磁盘空间不足
  • 内存不足

如果带有 git 的实例内存不足,那么您可以尝试添加一个交换临时:

fallocate -l 2G /swap
chmod 600 /swap
mkswap /swap
swapon /swap

完成后:

swapoff /swap
rm -f /swap

答案 13 :(得分:-1)

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

sudo chmod 777 -R Your_folder