Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JGit更新子模块时出现MissingObject异常_Git_Jgit - Fatal编程技术网

使用JGit更新子模块时出现MissingObject异常

使用JGit更新子模块时出现MissingObject异常,git,jgit,Git,Jgit,我正在尝试更新子模块: git.submoduleUpdate().call() 但我得到: org.eclipse.jgit.api.errors.JGitInternalException: Missing unknown e88da827bdc5c5a4b0d87b8be79b81567759411b at org.eclipse.jgit.api.SubmoduleUpdateCommand.call(SubmoduleUpdateCommand.java:211) a

我正在尝试更新子模块:

git.submoduleUpdate().call()
但我得到:

org.eclipse.jgit.api.errors.JGitInternalException: Missing unknown e88da827bdc5c5a4b0d87b8be79b81567759411b
    at org.eclipse.jgit.api.SubmoduleUpdateCommand.call(SubmoduleUpdateCommand.java:211)
    at kontinuum.WorkPackageProcessorKt.processWorkPackages(WorkPackageProcessor.kt:43)
    at kontinuum.MainKt.main(Main.kt:30)
Caused by: org.eclipse.jgit.errors.MissingObjectException: Missing unknown e88da827bdc5c5a4b0d87b8be79b81567759411b
    at org.eclipse.jgit.internal.storage.file.WindowCursor.open(WindowCursor.java:145)
    at org.eclipse.jgit.lib.ObjectReader.open(ObjectReader.java:226)
    at org.eclipse.jgit.revwalk.RevWalk.parseAny(RevWalk.java:859)
    at org.eclipse.jgit.revwalk.RevWalk.parseCommit(RevWalk.java:772)
    at org.eclipse.jgit.api.SubmoduleUpdateCommand.call(SubmoduleUpdateCommand.java:175)
    ... 2 more
有趣的是,它在控制台上工作:

kontinuum@ligi-tp ~/k/w/l/SurvivalManual> git submodule update
remote: Counting objects: 27, done.
remote: Compressing objects: 100% (27/27), done.
remote: Total 27 (delta 17), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (27/27), done.
From https://github.com/ligi/SurvivalManual.wiki
   b72e23e..e88da82  master     -> origin/master
Submodule path 'android/src/main/assets/md': checked out 'e88da827bdc5c5a4b0d87b8be79b81567759411b'

与git不同,JGit不会在子模块更新时获取新对象。要避免这种情况,可以尝试启用递归提取:

git config fetch.recurseSubmodules true

我不知道jgit是否实现了它,正如@max630指出的,这是一个jgit错误:

这是我目前的解决方法:

val walk = SubmoduleWalk.forIndex(git.repository)
while (walk.next()) {
   val submodule = walk.repository
   Git.wrap(submodule).fetch().call()
   submodule.close()
}

由于它在原生Git中工作,我认为这是JGit中的一个bug。如果您可以描述如何将本地存储库置于一种状态,使其在出现此异常时失败,那么您可能希望了解或通知。在您使用本机git执行此操作之后,它是否工作?在我看来,他们似乎没有提取丢失的对象。这方面已经存在一个bug: