在EGIT存储库中找到“活动”分支

时间:2015-03-17 08:41:24

标签: eclipse git egit jgit

我必须修改错误的程序/功能,这是org.eclipse.jgit的扩展

程序会覆盖PushResultDialog的close方法,并将Repository传递给方法。 在这里,我想找到实际推/出的分支。我只对主人有兴趣,如果不是我不想做任何事情。 否则我需要推送文件的列表。

首先,程序看起来像这样:

    head = repo.resolve(Constants.HEAD);
        RevCommit commit = rw.parseCommit(head);

        PersonIdent committerIdent = commit.getCommitterIdent();
        sCommitter = committerIdent.getName();

        String sBranch = "?";

        for (Map.Entry<String, Ref> e : repo.getAllRefs().entrySet()) {
            if (e.getKey().startsWith(Constants.R_HEADS)) {
                Ref ref = e.getValue();
                if (rw.isMergedInto(commit, rw.parseCommit(ref.getObjectId()))) {
                    sTemp = ref.getName();

                    int i = sTemp.lastIndexOf('/');
                    if (i == -1)
                        continue;

                    sBranch = sTemp.substring(i + 1);

                    System.out.println("Ref " + sBranch 
                            + " < contains > " + commit);

                    if (sBranch.equalsIgnoreCase("master")) {
                        break;
                    } else {
                        return;
                    }
                }
            }
        }

        RevCommit parent = rw.parseCommit(commit.getParent(0).getId());
        DiffFormatter df = new DiffFormatter(
                DisabledOutputStream.INSTANCE);
        df.setRepository(repo);
        df.setDiffComparator(RawTextComparator.DEFAULT);
        df.setDetectRenames(true);
        List<DiffEntry> diffs = df.scan(parent.getTree(),
                commit.getTree());
        for (DiffEntry diff : diffs) {
            sTemp = diff.getNewPath();
            pushedObjects.add(sTemp);
        }

现在..只要eclipse中的工作流程只是“checkout master”“pull”“merge branch”“push”就可以了。

任何其他顺序似乎都与集合中分支的顺序相混淆,并且它偶然发现了这个“其他”:

if (sBranch.equalsIgnoreCase("master")) {
      break;
 } else {
      return;
 }

问题是:是否有一种选择正确分支的eaasy方法?

1 个答案:

答案 0 :(得分:0)

好吧,我想我可以简单地看一下集合中的HEAD:

e.getKey().startsWith(Constants.HEAD)

然后解析branchname,它应该始终是签出的分支,如果(在我的情况下),如果它是主人,我很高兴。