【发布时间】:2013-02-28 11:32:38
【问题描述】:
从一个拉到下一个,服务器上的每个git pull 都以这样的方式结束:
$ 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 clone 不是一个好的解决方案,因为此存储库位于正在运行的服务器项目上,并且在没有 git 控制的情况下有更多文件。
是否可以将clone 复制到新目录,然后将.git 目录复制到旧文件夹中?或者有没有其他不接触目录的解决方案?
【问题讨论】:
-
您能否在另一个目录中执行
git clone并比较这两个存储库中.git目录的内容?这可能会告诉您缺少哪些对象。 -
@Tuxdude 问题是这条消息出现在 new 对象上——那些 应该 每次我做
git pull时都会自动拉出的对象。同样在新克隆的存储库中,所有对象都被压缩,无法进行比较。 -
您可以运行
git fsck来验证 .git 目录中所有对象的有效性,以及任何丢失的对象。git gc也可能有助于修剪掉不需要的对象。 -
也请查看此链接,kernel.org/pub/software/scm/git/docs/… 以获得一些有用的指示。
-
不要替换
.git目录(或其部分内容)!它包含整个历史(以及更多),如果你不知道自己在做什么,那么在那儿乱搞将破坏项目。而且我只会在完整存储库的副本中翻找。