GIT Packfile声称有更多的对象,无法访问

时间:2012-07-09 19:06:35

标签: git object git-pull

嘿伙计们我遇到了关于我的包文件的多个错误,这些错误看起来很阴险, 这是一个非常可怕的交易,因为这是一个现场网站,我不知道如何处理它, 也许有人可以跟我说说,这里有什么事。

似乎我有一个丢失的对象,而且我的packfile计数也不好?

remote: Counting objects: 25733, done.
remote: Compressing objects: 100% (12458/12458), done.
remote: Total 19185 (delta 6914), reused 17995 (delta 6535)

Receiving objects: 100% (19185/19185), 1.69 GiB | 465 KiB/s, done.
Resolving deltas: 100% (6914/6914), completed with 1058 local objects.

error: packfile .git/objects/pack/pack-1f0643b00b9c201338b7f1365ef188ef682a6a9e.pack claims to have 19185 objects while index indicates 20243 objects
error: packfile .git/objects/pack/pack-1f0643b00b9c201338b7f1365ef188ef682a6a9e.pack cannot be accessed
error: packfile .git/objects/pack/pack-1f0643b00b9c201338b7f1365ef188ef682a6a9e.pack claims to have 19185 objects while index indicates 20243 objects
error: packfile .git/objects/pack/pack-1f0643b00b9c201338b7f1365ef188ef682a6a9e.pack cannot be accessed
error: packfile .git/objects/pack/pack-1f0643b00b9c201338b7f1365ef188ef682a6a9e.pack claims to have 19185 objects while index indicates 20243 objects
error: packfile .git/objects/pack/pack-1f0643b00b9c201338b7f1365ef188ef682a6a9e.pack cannot be accessed

error: unable to find e17196d88ae91dea07b4d61716b91dac581fb131

error: packfile .git/objects/pack/pack-1f0643b00b9c201338b7f1365ef188ef682a6a9e.pack claims to have 19185 objects while index indicates 20243 objects
error: packfile .git/objects/pack/pack-1f0643b00b9c201338b7f1365ef188ef682a6a9e.pack cannot be accessed

fatal: object e17196d88ae91dea07b4d61716b91dac581fb131 not found

修改 另一个似乎已经萌芽了,所以现在我已经.... [/ p>

.git/objects/pack/pack-1f0643b00b9c201338b7f1365ef188ef682a6a9e.pack 
.git/objects/pack/pack-931e28ca404e28040a10085dd1534ef12cf18c6d.pack

我已尝试将这些文件复制到www-root上并删除它们,现在正在运行git-gc,我将尝试使用git fetch origin

重新获取原点

git-gc现在返回

bad sha1 file: .git/objects/05/.a2e1939ce5a53d5ec7c3cacc4df97acd09c6af.hdgIVe
bad sha1 file: .git/objects/80/.1a75684e9d869e9ed7c1ded674c55caa17c524.YUr1Yu
bad sha1 file: .git/objects/8c/.7e8381b3e0d0a1f1d4fa328f0dda0a1dbd814a.L0255H
bad sha1 file: .git/objects/c5/.32926ac2d67785cb8580b885ac3d3fd7075f57.rDsW4H
Removing stale temporary file .git/objects/pack/tmp_pack_jnP5qn

2 个答案:

答案 0 :(得分:1)

看起来其他仓库中存在一些损坏。如果它是一个中央回购,请从您的回购中重新克隆它然后让每个人都推动他们的分支机构。你的拉动应该在那之后工作 - 除非你不能得到消息说你将回购修复给每个人..

答案 1 :(得分:1)

如" Problems with corrupt git repo"及其associated discussion所述:

  

然后将这些对象中的许多对象打包到一个packfile中以节省空间。   您通过更改内容来破坏这些包文件 - 更糟糕的是:更改其内容的长度    git fsck实际上没有修复有关git存储库的任何内容,只是检查错误并报告
  另一方面,git unpack-objects能够从损坏的packfile中尽可能地解压缩,但您的仓库中仍会出现错误,因为git fsck --full会报告。
  见" How to fix a broken repository?"或" How to remove all broken refs from a repository?"。

请注意,使用Git 2。4。3(2015年6月),不再有警告packfile .git/objects/pack/pack-xxx.pack cannot be accessed 这样只关注实际的错误。

commit 319b678Jeff King (peff) [2015年3月31日] (由Junio C Hamano -- gitster --合并于commit 3c91e99,2015年6月5日)

与Peff一样,解释很有启发性:

  

sha1_file:压制" packfile cannot be accessed"警告

     

当我们在packfile索引中找到一个对象时,我们确保我们仍然可以打开packfile本身(或者它已经打开),因为它可能已经被同时重新打包删除了。
  如果我们无法访问packfile,我们会为用户打印一个警告并告诉来电者我们没有该对象(我们可以查看其他包文件,或者找到一个松散的版本,然后放弃)。

     

我们向用户打印的警告并未真正完成任何操作,并且可能会让用户感到困惑

     

在正常情况下,它是完整的噪音;我们在其他地方找到了这个对象,并且用户不必关心我们匆匆看到一个变得陈旧的packfile索引。它根本不影响操作。

     

可能更有趣的情况是我们以后无法找到对象,并向用户报告失败。在这种情况下,警告可以被视为最终失败的线索。但它在实践中并不是真正有用的线索。我们甚至不会一直打印它(因为我们正在与另一个进程竞争,我们甚至可能看不到.idx文件,   或者我们可能赢得比赛并打开packfile,完成操作。)

     

此修补程序完全放弃警告(不仅来自fill_pack_entry网站,还来自pack-objects中的相同用途)。
  如果我们确实在错误情况下发现警告很有意义,我们可以将其填满,并在我们稍后die()由于对象损坏时将其显示给用户。但这种复杂性并不值得。