我一直在研究这个问题几天没有运气。我发现很多帖子报告了类似的问题,但没有报告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
,我就会收到上述错误。
服务器上的修订如下:
在服务器端运行git fsck
返回确定。
运行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代码审阅页面上的任何位置(仅在错误消息中)。任何新的提交都会导致此错误。
答案 0 :(得分:0)
查看Gerrit Bug Tracker会显示this issue
该分支上的一个开发人员是否强行推动了?
您可以查看这个进入gerrit文件夹安装,然后检查项目的git文件夹并查找历史记录。我怀疑一位开发人员强行推动5f3190e131541cec4ef7176262eaf4a03c4a4e6c
答案 1 :(得分:0)
Gerrit索引似乎是导致此错误的原因。索引指向不存在的对象,即使rebuilding the index也没有解决此问题。
搜索所有git对象时未找到任何匹配项。我使用了here描述的方法。
我认为我的问题与此错误报告here
有关要考虑的可能解决方案是创建一个新分支,因为此问题仅在特定分支上出现。我还会标记并删除有问题的分支,因为它不再可用了。
在Gerrit中删除项目并重新创建它似乎可行(如果它很容易),但delete-project插件在子模块订阅方面有一些限制。
手动删除磁盘上的repo.git,然后刷新Gerrit缓存确实会删除项目,但Gerrit不允许创建另一个具有相同名称的项目。