我如何使用 JGit API 从父提交中获取树?
How do I get the tree from parent commits using the JGit API?
对于给定的提交,我想获取父提交树,以便我可以继续比较更改。我发现父 RevCommit 对象上的 getTree() 总是 returns null.
ObjectId lastCommitId = repository.resolve(Constants.HEAD);
RevWalk revWalk = new RevWalk(repository);
RevCommit commit = revWalk.parseCommit(lastCommitId);
List<RevCommit> parents = new ArrayList<>();
for(RevCommit parent : commit.getParents()) {
parents.add(parent);
}
if ( parents.get(0).getTree() == null ) {
System.out.println("first parent tree was null");
}
我是不是走错了路?父对象是浅拷贝吗,我必须做一些事情来填充树 属性?
我确实让它按如下方式工作,但仍然想知道这是否是正确的方法。
ObjectId lastCommitId = repository.resolve(Constants.HEAD);
RevWalk revWalk = new RevWalk(repository);
RevCommit commit = revWalk.parseCommit(lastCommitId);
List<RevCommit> parents = new ArrayList<>();
for(RevCommit parent : commit.getParents()) {
RevCommit deepCopy = revWalk.parseCommit(parent.getId());
parents.add(deepCopy);
}
if ( parents.get(0).getTree() != null ) {
System.out.println(parents.get(0).getTree().toString());
} else {
System.out.println("first parent tree was null");
}
你的第二种做法是对的。 commit.getParents()
returns 不完整 RevCommit
s。虽然设置了它们的 ID 属性,但所有其他属性(树、消息、作者、提交者等)都没有。因此 NullPointerException
。为了实际使用 parent 提交,您需要首先解析提交 header,或者像
一样使用 parseCommit
parentCommit = revWalk.parseCommit(parentCommit.getId());
或 parseHeaders
revWalk.parseHeaders(parentCommit);
对于给定的提交,我想获取父提交树,以便我可以继续比较更改。我发现父 RevCommit 对象上的 getTree() 总是 returns null.
ObjectId lastCommitId = repository.resolve(Constants.HEAD);
RevWalk revWalk = new RevWalk(repository);
RevCommit commit = revWalk.parseCommit(lastCommitId);
List<RevCommit> parents = new ArrayList<>();
for(RevCommit parent : commit.getParents()) {
parents.add(parent);
}
if ( parents.get(0).getTree() == null ) {
System.out.println("first parent tree was null");
}
我是不是走错了路?父对象是浅拷贝吗,我必须做一些事情来填充树 属性?
我确实让它按如下方式工作,但仍然想知道这是否是正确的方法。
ObjectId lastCommitId = repository.resolve(Constants.HEAD);
RevWalk revWalk = new RevWalk(repository);
RevCommit commit = revWalk.parseCommit(lastCommitId);
List<RevCommit> parents = new ArrayList<>();
for(RevCommit parent : commit.getParents()) {
RevCommit deepCopy = revWalk.parseCommit(parent.getId());
parents.add(deepCopy);
}
if ( parents.get(0).getTree() != null ) {
System.out.println(parents.get(0).getTree().toString());
} else {
System.out.println("first parent tree was null");
}
你的第二种做法是对的。 commit.getParents()
returns 不完整 RevCommit
s。虽然设置了它们的 ID 属性,但所有其他属性(树、消息、作者、提交者等)都没有。因此 NullPointerException
。为了实际使用 parent 提交,您需要首先解析提交 header,或者像
parseCommit
parentCommit = revWalk.parseCommit(parentCommit.getId());
或 parseHeaders
revWalk.parseHeaders(parentCommit);