2017-04-04 31 views
4

更新子模塊我試圖更新子模塊:MissingObjectException而與JGit

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 

有趣的是它的工作原理在控制檯上:

[email protected] ~/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' 
+0

因爲它在本地GI噸,我認爲這是JGit的一個bug。如果您可以描述如何將本地存儲庫置於某個狀態,以便在發生此異常時失敗,則可能需要[打開一個錯誤](https://eclipse.org/jgit/support/)或通知[JGit郵件列表](https://dev.eclipse.org/mailman/listinfo/jgit-dev)。 –

+0

在使用原生git完成後是否有效?對我來說,他們看起來像他們沒有獲取丟失的對象 – max630

+2

有一個關於這個問題的bug:https://bugs.eclipse.org/bugs/show_bug.cgi?id=470318 – max630

回答

2

正如@ max630指出,這是一個錯誤jgit:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=470318

這是我的解決方法現在:

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

JGit做不會在子模塊更新中獲取新對象,與git不同。爲了避免這種情況,你可以嘗試啓用遞歸獲取:

git config fetch.recurseSubmodules true 

我不知道但如果jgit實現它