JGit:从子模块读取提交

时间:2014-09-28 22:05:32

标签: git-submodules jgit

我正在尝试向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做到这一点?或者对子模块的支持尚不完全?

1 个答案:

答案 0 :(得分:1)

似乎诀窍是不像普通的Git存储库那样打开子模块的存储库,但是使用JGit类SubmoduleWalk和父存储库来执行此操作!

以下内容对我有所帮助:

     Repository subRepo = SubmoduleWalk.getSubmoduleRepository(repository, "fuse-jna");