AOSP代码库同步错误,HEAD对象损坏。

8

大约一两年前,我曾经与AOSP合作并成功地编译和安装了它。现在我想重新启动它来进行一些开发工作。然而,我一直遇到这个错误:

    Fetching projects: 100% (486/486), done.  
Traceback (most recent call last):
  File "/home/hoshi/WORKING_DIRECTORY/.repo/repo/main.py", line 500, in <module>
    _Main(sys.argv[1:])
  File "/home/hoshi/WORKING_DIRECTORY/.repo/repo/main.py", line 476, in _Main
    result = repo._Run(argv) or 0
  File "/home/hoshi/WORKING_DIRECTORY/.repo/repo/main.py", line 155, in _Run
    result = cmd.Execute(copts, cargs)
  File "/home/hoshi/WORKING_DIRECTORY/.repo/repo/subcmds/sync.py", line 675, in Execute
    project.Sync_LocalHalf(syncbuf)
  File "/home/hoshi/WORKING_DIRECTORY/.repo/repo/project.py", line 1204, in Sync_LocalHalf
    lost = self._revlist(not_rev(revid), HEAD)
  File "/home/hoshi/WORKING_DIRECTORY/.repo/repo/project.py", line 2241, in _revlist
    return self.work_git.rev_list(*a, **kw)
  File "/home/hoshi/WORKING_DIRECTORY/.repo/repo/project.py", line 2435, in rev_list
    p.stderr))
error.GitError: device/lge/mako-kernel rev-list ('^7bf237bdf8a8c6d516219dc09b3bc114aa0e863d', 'HEAD', '--'): fatal: bad object HEAD

这是在成功“获取所有软件包”(上述终端输出的第一行)之后发生的。我尝试删除工作目录中的.repo文件夹并在那里重新初始化repo。我以为它修复了问题,但在同步几个小时后又出现了错误!我已经尝试了来自各种讨论/论坛的几个解决方案,但似乎无法解决。

任何帮助寻找解决方案都将不胜感激!

4个回答

12

我知道这个问题已经发布了一年多,但希望这个答案能帮助其他人。而且当出现这种情况时会很令人沮丧,因为获取可能需要很多分钟,然后才知道错误仍然存在或最终得到解决。

解决方法是清除与错误消息中命名的相关项目的 .git 文件夹(在这种情况下,它是 lge/mako-kernel)。

$ rm -rf .repo/project-objects/device/lge/mako-kernel.git
$ rm -rf .repo/projects/device/lge/mako-kernel.git
$ rm -rf device/lge/mako-kernel/.git

请注意,如果不删除这三个文件夹中的所有内容,则树的状态将不一致,并且会发生相同的错误。

多个项目也报告了此问题,因此我进行了迭代式应用,直到整个同步成功为止。


如果manifest/.git是问题,那么这个方法行不通。 错误:在sync中:[Errno 2]没有这样的文件或目录:'/home/jan/src/android/neo-los13/.repo/manifests/.git/HEAD' 错误:清单丢失或无法读取--请运行init 在项目和项目对象中都没有清单。 - JPT
2
好的。那真是太痛苦了。对于那些想要使用新版本AOSP的特性读者来说,这是由于HEAD上的提交被重新基于而导致的。 - RubberDuck
我记不清这是否真正修复了我的错误,但我将其标记为解决方案。我想我确实已经解决了它,但已经过了一段时间,我并没有完全回忆起来。 - jdods
这不是解决方案,你建议只是删除一切并重新下载。 - Nobody
4
在我这里也是一样,.repo/manifests 目录是问题所在:error.GitError: manifests rev-list (u'^988591c2604701096c0f86dd695ff5d4ed6b7c88', 'HEAD', '--'): fatal: bad revision 'HEAD'。解决方法是执行 rm -rf .repo/manifests/.git 然后执行 repo init。 - Padmanabha V

1
在我的情况下,“清单”是一个问题。
错误.GitError:清单rev-list('^HEAD',u'a0383f844a8176c76d3cc47d717dacd93e5ba529','--'):致命错误:错误的修订'^HEAD'
我通过删除这个文件夹来解决了这个问题。
rm -rf .repo/manifests/.git/

0

@dr_g提供的答案对我有帮助。

作为该解决方案的补充,我使用以下脚本片段来批量清理一堆失败的GIT存储库。根据您的要求编辑数组arr中的条目。

declare -a arr=(
   "platform/external/ImageMagick" 
   "platform/external/curl"
   "platform/external/deqp"
)

for i in "${arr[@]}"
do
   echo "Cleaning ${i} ..."
   rm -rf .repo/project-objects/${i}.git
   rm -rf .repo/projects/${i}.git
   rm -rf ${i}/.git
done

0
我可以使用以下命令来处理同样的问题:
repo forall -vc "git reset --hard"

希望对你有用!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接