【问题标题】:Gerrit code review error MissingObjectException on Submit change提交更改时 Gerrit 代码审查错误 MissingObjectException
【发布时间】:2017-01-16 15:35:45
【问题描述】:

我这几天一直在研究这个问题,但没有运气。我发现许多帖子报告了类似的问题,但没有提到 Gerrit 代码审查。

情况是我们有一个包含许多分支的仓库。只有一个分支 (dev) 显示此问题。

org.eclipse.jgit.errors.MissingObjectException: Missing unknown 5f3190e131541cec4ef7176262eaf4a03c4a4e6c
        at com.google.gerrit.server.git.MergeOp.integrateIntoHistory(MergeOp.java:497)
        at com.google.gerrit.server.git.MergeOp.merge(MergeOp.java:433)
        at com.google.gerrit.server.change.Submit.apply(Submit.java:225)
        at com.google.gerrit.server.change.Submit.apply(Submit.java:83)
        at com.google.gerrit.httpd.restapi.RestApiServlet.service(RestApiServlet.java:341)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:286)
        at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:276)
        at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:181)
        at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91)

要重现错误,只需进行更改。提交并推送到 gerrit refs/for/dev。一旦我在 Gerrit 中单击 Submit,就会出现上述错误。

服务器上的修改如下:

  • Gerrit 代码审查 (2.13.1)
  • Git-2.1.0
  • Java 1.7.0_71

在服务器端运行 git fsck 返回 Ok。

运行git show 5f3190e131541cec4ef7176262eaf4a03c4a4e6c 返回

fatal: bad object 5f3190e131541cec4ef7176262eaf4a03c4a4e6c

将 Gerrit 中的项目首选项从 Merge if necessary 更改为 Rebase if necessary 时出现此异常。

Caused by: com.google.gerrit.server.git.UpdateException: org.eclipse.jgit.errors.MissingObjectException: Missing unknown 5f3190e131541cec4ef7176262eaf4a03c4a4e6c
        at com.google.gerrit.server.git.BatchUpdate.executeUpdateRepo(BatchUpdate.java:673)
        at com.google.gerrit.server.git.BatchUpdate.execute(BatchUpdate.java:400)
        at com.google.gerrit.server.git.MergeOp.integrateIntoHistory(MergeOp.java:478)
        ... 43 more
Caused by: org.eclipse.jgit.errors.MissingObjectException: Missing unknown 5f3190e131541cec4ef7176262eaf4a03c4a4e6c
        at org.eclipse.jgit.internal.storage.file.WindowCursor.open(WindowCursor.java:158)
        at org.eclipse.jgit.lib.ObjectReader.open(ObjectReader.java:227)
        at org.eclipse.jgit.revwalk.RevWalk.parseAny(RevWalk.java:859)
        at org.eclipse.jgit.revwalk.RevWalk.parseCommit(RevWalk.java:772)
        at com.google.gerrit.server.git.CodeReviewCommit$CodeReviewRevWalk.parseCommit(CodeReviewCommit.java:110)
        at com.google.gerrit.server.git.SubmoduleOp.updateSubmodule(SubmoduleOp.java:461)
        at com.google.gerrit.server.git.SubmoduleOp.composeGitlinksCommit(SubmoduleOp.java:369)
        at com.google.gerrit.server.git.SubmoduleOp$GitlinkOp.updateRepo(SubmoduleOp.java:85)
        at com.google.gerrit.server.git.BatchUpdate.executeUpdateRepo(BatchUpdate.java:661)
        ... 45 more

值得一提的是,哈希5f3190e131541cec4ef7176262eaf4a03c4a4e6c 不会显示在 Gerrit 代码审查页面的任何地方(仅在错误消息中)。任何新的提交都会导致这个错误。

【问题讨论】:

  • 是 SHA 在更改屏幕的“提交”字段(“提交者”和“父母”字段之间)显示的 5f3190e131541cec4ef7176262eaf4a03c4a4e6c 吗?还是那里有另一个 SHA?
  • 不,它不会显示在 gerrit 页面的任何位置。仅在错误消息中。我也用这条评论更新了帖子。

标签: git gerrit jgit


【解决方案1】:

查看Gerrit Bug Tracker 显示this issue

该分支上的某个开发人员是否已强制推送?

你可以检查这个去 gerrit 文件夹安装,然后你的项目的 git 文件夹并查找历史。我怀疑一位开发人员强制推送5f3190e131541cec4ef7176262eaf4a03c4a4e6c

【讨论】:

  • 我新建了一个Gerrit项目project-1,并将有问题的project.git的内容复制到project-1.git。之后,我检查了 dev 分支并能够交付更改并将其合并而没有问题。 The issue你提到的似乎报告了非常相似的问题,不同的是在我的项目中没有子模块。
【解决方案2】:

Gerrit 索引似乎是导致此错误的原因。索引指向不存在的对象,即使rebuilding the index 也没有解决这个问题。

搜索所有 git 对象没有找到任何匹配项。我使用了here描述的方法。

我认为我的问题与此错误报告有关here

要考虑的可能解决方案是创建一个新分支,因为此问题仅在特定分支上出现。我也会标记并删除有问题的分支,因为它不再可用了。

在 Gerrit 中删除项目并重新创建它似乎可行(如果这样做很容易的话),但 delete-project 插件在子模块订阅方面有一些限制。

手动删除磁盘上的 repo.git 然后刷新 Gerrit 缓存确实会删除项目,但是 Gerrit 不允许创建另一个同名项目。

【讨论】:

    猜你喜欢
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多