缺少的 JGit 文档似乎没有说明如何在使用 RevWalk 时使用/检测分支。
这个问题说的差不多。
所以我的问题是:如何从 RevCommit 中获取分支名称/ID?或者我如何事先指定要遍历的分支?
通过循环分支找到了更好的方法。
我通过调用循环遍历分支
for (Ref branch : git.branchList().call()){
git.checkout().setName(branch.getName()).call();
// Then just revwalk as normal.
}
查看 JGit 的当前实现(参见它的 git repo和它的RevCommit类),我没有找到与“ Git:查找提交来自哪个分支”中列出的等效内容。
IE:
git branch --contains <commit>
仅实现了一些选项git branch
(如 中ListBranchCommand.java
)。
可以使用以下代码通过提交获取“来自”分支:
/**
* find out which branch that specified commit come from.
*
* @param commit
* @return branch name.
* @throws GitException
*/
public String getFromBranch(RevCommit commit) throws GitException{
try {
Collection<ReflogEntry> entries = git.reflog().call();
for (ReflogEntry entry:entries){
if (!entry.getOldId().getName().equals(commit.getName())){
continue;
}
CheckoutEntry checkOutEntry = entry.parseCheckout();
if (checkOutEntry != null){
return checkOutEntry.getFromBranch();
}
}
return null;
} catch (Exception e) {
throw new GitException("fail to get ref log.", e);
}
}