1
我有一個測試提交(所有默認分支)的存儲庫。 使用JGit登錄命令,我可以看到這些承諾(對於爲例):Jgit RevWalk.parseCommit()throw MissingObjectException
RepositoryBuilder builder = new RepositoryBuilder();
Repository repository = builder.setWorkTree("/tmp/myworkingdir").readEnvironment().findGitDir().build();
Git git = new Git(repository);
for (RevCommit commit : git.log().call()) {
System.out.println("commit: " + commit.getId());
}
結果:
commit: commit f34a848371ff334b2e85aa16fbf9b871d028b443 1371652639 ----sp
commit: commit 33603f8c1c47712d45eb0db4b1827bbd113c2428 1371652639 ----sp
commit: commit d52bd5c768263a957d99975f5482020ffc3434d5 1371652639 ----sp
但是,當我嘗試從字符串SHA1獲得RevCommit它放在最後一行失敗
ObjectId revid = repository.resolve("33603f8c1c47712d45eb0db4b1827bbd113c2428");
RevWalk revWalk = new RevWalk(repository);
RevCommit commit = revWalk.parseCommit(revid);
異常::
org.eclipse.jgit.errors.MissingObjectException: Missing unknown 33603f8c1c47712d45eb0db4b1827bbd113c2428
at org.eclipse.jgit.storage.file.WindowCursor.open(WindowCursor.java:126)
at org.eclipse.jgit.lib.ObjectReader.open(ObjectReader.java:229)
at org.eclipse.jgit.revwalk.RevWalk.parseAny(RevWalk.java:817)
at org.eclipse.jgit.revwalk.RevWalk.parseCommit(RevWalk.java:730)
這個片段的
我在做什麼錯了?
存儲庫的解決方案 初始化是錯誤的接入部分..
您對API的使用看起來是正確的。你確定'repository'和'git.getRepository()'是同一個倉庫嗎?你如何運行這段代碼,是你正在處理的存儲庫是由以前的代碼生成的(在這種情況下,提交ID會因提交時間而有所不同)? – robinst
我試着存儲庫和git.getRepository(),沒有改變。 存儲庫是由更早的代碼生成的,但是在我真實的情況下,每次都從git log命令提取提交ID,並且它不應該在生成和訪問之間改變。:s –
我也嘗試過從github直接克隆的存儲庫,我得到同樣的問題..我使用git日誌,採取一個提交id「隨機」,並嘗試訪問它後,它導致這個org.eclipse.jgit.errors.MissingObjectException。 .. –