我正在尝试向project of mine添加子模块支持,但是我似乎无法使用JGit来读取特定的提交或记录,而命令行git可以做到这一点就好了,尽管头部分离了子模块在(通过设计子模块的工作方式)。
我有这样的代码,“fuse-jna”是子模块:
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)
但是在“fuse-jna”目录中的命令行
git diff 39c1c4b78ff751b0b9e28f4fb35148a1acd6646f~
工作正常,所以可以这样做。
有没有其他方法如何使用JGit做到这一点?或者对子模块的支持尚不完全?
答案 0 :(得分:1)
似乎诀窍是不像普通的Git存储库那样打开子模块的存储库,但是使用JGit类SubmoduleWalk和父存储库来执行此操作!
以下内容对我有所帮助:
Repository subRepo = SubmoduleWalk.getSubmoduleRepository(repository, "fuse-jna");