fixgit";“未找到对象”;永远
从一次拉取到下一次拉取,服务器上的每一次fixgit";“未找到对象”;永远,git,git-pull,git-fetch,Git,Git Pull,Git Fetch,从一次拉取到下一次拉取,服务器上的每一次git拉取都以以下方式结束: $ git pull remote: Counting objects: 53, done. remote: Compressing objects: 100% (32/32), done. remote: Total 32 (delta 19), reused 0 (delta 0) Unpacking objects: 100% (32/32), done. error: unable to find 71682baccf
git拉取
都以以下方式结束:
$ git pull
remote: Counting objects: 53, done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 32 (delta 19), reused 0 (delta 0)
Unpacking objects: 100% (32/32), done.
error: unable to find 71682baccff823caa21420b16dd231c6b9c1b133
fatal: object 71682baccff823caa21420b16dd231c6b9c1b133 not found
与git fetch相同。我可以通过将文件.git/object/71/682baccff823caa21420b16dd231c6b9c1b133
复制到服务器来解决这个问题,但是在多次拉取之后,错误仍然存在,每次都是分支上最新的提交对象
这怎么会发生?我怎样才能把它修好呢
完整的git克隆
不是一个好的解决方案,因为此存储库位于正在运行的服务器项目上,并且在没有git控制的情况下有更多的文件
是否可以将
克隆到新目录中,然后将.git
目录复制到旧文件夹中?或者有没有其他不涉及目录的解决方案?我可以通过
尝试获取(错误)
像上面一样复制对象文件
git合并
,提交丢失的对象文件
现在它似乎已经解决了,错误不再出现。我正在运行一个开发团队,有一个损坏的git存储库,因为我们还没有时间修复它。我发现有很多东西可以让球移动,这可能会有所帮助
首先有一台[gc]auto=0的机器,并将整个repo解包到对象
其次,Git1.8似乎比1.7更好地处理问题,因此,让一台使用Git1.8的机器能够访问包含源代码的文件系统
第三,总是从1.8机器获取git,然后从1.7机器获取git
第四,即使是1.8也无法git pull时,您需要运行git fsck | grep missing并手动将未打包的回购中的对象复制到损坏的回购上的对象存储中(其中缺失的0c0ef24…将位于objects/0c/0ef24…)
对于我来说,这是一个谜,为什么git fetch/pull没有意识到这些是本地git中丢失的,并从源代码中获取它们,但是手动执行fetch似乎让git再次感到高兴。手动修复git repo后,运行git gc(但不要在未打包的机器上运行,否则需要找到丢失的对象,然后才能再次手动修复,这很烦人)
真正方便的是一个命令,告诉git从源代码获取一个特定的对象,但我想如果它这样做而不需要被询问会更好:-)
希望有帮助 我今天在尝试使用git 1.7.1从centos 6机器上进行git拉取时遇到了这个问题。在我将git客户端从rpmforge extras升级到1.7.11之后,问题就解决了。您能否在另一个目录中执行git克隆
,并比较这两个repo中.git
目录的内容?这可能会向您显示缺少哪些对象。@Tuxdude问题是,此消息出现在新对象上—这些对象应该在我每次执行git pull时自动提取。此外,在新克隆的repo中,所有对象都会被压缩,因此无法真正进行比较。您可以运行git fsck
来验证.git目录中所有对象以及任何缺失对象的有效性git gc
也可能有助于删除不需要的对象。还请签出此链接以获取一些有用的指针。不要替换.git
目录(或其部分内容)!它包含了整个历史(以及更多),如果你不知道自己在做什么,在那里乱搞会毁掉这个项目。我只会在那里翻找完整存储库的副本。