8

缺少的 JGit 文档似乎没有说明如何在使用 RevWalk 时使用/检测分支。

这个问题说的差不多。

所以我的问题是:如何从 RevCommit 中获取分支名称/ID?或者我如何事先指定要遍历的分支?

4

3 回答 3

6

通过循环分支找到了更好的方法。

我通过调用循环遍历分支

for (Ref branch : git.branchList().call()){
    git.checkout().setName(branch.getName()).call();
    // Then just revwalk as normal.
}
于 2012-05-04T00:24:39.830 回答
2

查看 JGit 的当前实现(参见它的 git repo和它的RevCommit类),我没有找到与“ Git:查找提交来自哪个分支”中列出的等效内容。
IE:

git branch --contains <commit>

仅实现了一些选项git branch(如 中ListBranchCommand.java)。

于 2012-05-03T19:35:24.963 回答
1

可以使用以下代码通过提交获取“来自”分支:

/**
     * 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);
        }
    }
于 2012-12-18T03:20:49.537 回答