在 EGIT 存储库中找到 "active" 分支
finding "active" branch in EGIT repository
我必须修改一个错误的 program/feature,它是对 org.eclipse.jgit
的扩展
程序重写了 PushResultDialog 的关闭方法,并将 Repository 传递给一个方法。
在这里我想找到实际上 pushed/checked 出来的分支。我只对它是主人感兴趣,否则我什么都不想做。
否则我需要推送文件的列表。
首先程序是这样的:
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"
任何其他顺序似乎都与集合中分支的顺序混淆,并且它偶然发现了这个 "else" :
if (sBranch.equalsIgnoreCase("master")) {
break;
} else {
return;
}
问题是:有没有简单的方法来选择正确的分支?
好的,我想我可以简单地看一下集合中的 HEAD:
e.getKey().startsWith(Constants.HEAD)
然后解析分支名称,它应该始终是签出的分支,如果(在我的情况下)如果它是主分支,我很高兴。
我必须修改一个错误的 program/feature,它是对 org.eclipse.jgit
的扩展程序重写了 PushResultDialog 的关闭方法,并将 Repository 传递给一个方法。 在这里我想找到实际上 pushed/checked 出来的分支。我只对它是主人感兴趣,否则我什么都不想做。 否则我需要推送文件的列表。
首先程序是这样的:
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"
任何其他顺序似乎都与集合中分支的顺序混淆,并且它偶然发现了这个 "else" :
if (sBranch.equalsIgnoreCase("master")) {
break;
} else {
return;
}
问题是:有没有简单的方法来选择正确的分支?
好的,我想我可以简单地看一下集合中的 HEAD:
e.getKey().startsWith(Constants.HEAD)
然后解析分支名称,它应该始终是签出的分支,如果(在我的情况下)如果它是主分支,我很高兴。