我正在尝试将子模块支持添加到project of mine,但我似乎无法使用JGit读取特定的提交或记录,而命令行git可以做到这一点,尽管分离首先说明子模块在哪里(就设计子模块的工作而言)。JGit:从子模块读取提交
我有这样的代码,以“熔断器人民军”是子模块:
FileRepositoryBuilder builder = new FileRepositoryBuilder();
Repository repository = builder.setGitDir(new File("fuse-jna/.git"))
.readEnvironment() // scan environment GIT_* variables
.findGitDir() // scan up the file system tree
.build();
ObjectId lastCommitId = repository.resolve("39c1c4b78ff751b0b9e28f4fb35148a1acd6646f");
Iterable<RevCommit> commits = new Git(repository).log().add(lastCommitId).call();
for(RevCommit commit : commits) {
System.out.println("Commit: " + commit.getId());
}
这个我得到:
org.eclipse.jgit.errors.MissingObjectException: Missing commit 39c1c4b78ff751b0b9e28f4fb35148a1acd6646f
at org.eclipse.jgit.internal.storage.file.WindowCursor.open(WindowCursor.java:149)
at org.eclipse.jgit.revwalk.RevWalk.getCachedBytes(RevWalk.java:883)
at org.eclipse.jgit.revwalk.RevCommit.parseHeaders(RevCommit.java:145)
at org.eclipse.jgit.revwalk.RevWalk.markStart(RevWalk.java:279)
at org.eclipse.jgit.api.LogCommand.add(LogCommand.java:330)
at org.eclipse.jgit.api.LogCommand.add(LogCommand.java:189)
at org.dstadler.jgitfs.util.JGitHelperTest.testGitLinkRepository(JGitHelperTest.java:638)
但是在命令行中的“保险丝南斯拉夫人民军”目录
git diff 39c1c4b78ff751b0b9e28f4fb35148a1acd6646f~
工作得很好,所以有可能这样做。
有没有其他方法如何与JGit做到这一点?或者是不完全支持子模块呢?
仅供参考,同样使用内部的“git的/模块/熔断器JNA/git的”不工作。此外,“repository.getAllRefs()”也会返回一个空列表,所以在这里根本找不到参考... – centic 2014-09-28 22:07:47
我不知道JGit是如何工作的,但是关于子模块,它们基本上都是自己的仓库。在命令行中,当你在子模块的目录中时,你也只能看到他们的提交。使用JGit,你是从子模块的目录还是主存储库的目录中尝试它? – rednaw 2014-09-28 22:15:40
在代码中列出的代码中,我试图像普通的Git仓库一样打开子模块库,但这似乎不是JGit在这里需要的,请参阅下面的自我回答。 – centic 2014-09-28 22:43:56