gpt4 book ai didi

git-submodules - JGit:从子模块中读取提交

转载 作者:行者123 更新时间:2023-12-02 03:32:01 25 4
gpt4 key购买 nike

我正在尝试将子模块支持添加到 project of mine ,但是我似乎无法使用 JGit 来读取特定的提交或记录,而命令行 git 可以很好地做到这一点,尽 pipe 模块所在的头部是分离的(就子模块如何工作的设计而言)。

我有这样的代码,“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 做到这一点?还是对子模块的支持还没有完全到位?

最佳答案

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

在玩了更多之后,以下内容确实对我有用:

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

关于git-submodules - JGit:从子模块中读取提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26090139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com