确定分支是远程的还是本地的(使用JGit)?

确定分支是远程的还是本地的(使用JGit)?,git,jgit,Git,Jgit,有没有办法使用JGit确定一个分支是远程分支还是本地分支(或两者都是)?我有: Map<String, Ref> allRefs = git.getRepository().getAllRefs(); Collection<Ref> values = allRefs.values(); for (Ref ref : values) { refs.add(ref.getName()); } 因此,newFeatureBranch既是本地分支,也是远程分支。目前我检查r

有没有办法使用JGit确定一个分支是远程分支还是本地分支(或两者都是)?我有:

Map<String, Ref> allRefs = git.getRepository().getAllRefs();
Collection<Ref> values = allRefs.values();
for (Ref ref : values) {
  refs.add(ref.getName());
}

因此,newFeatureBranch既是本地分支,也是远程分支。目前我检查ref.getName()是否包含“remotes/origin”。但是有没有更好的方法来确定分支是远程的还是本地的呢?

在git中,所有分支都是本地的。它们都位于
.git/refs
中的本地存储库中,并且都只是指向本地提交的指针

所谓的“远程分支”只是由git fetch创建的本地分支

如何调用这些“远程分支”由
git config remote.origin.fetch
决定,它通常会简单地告诉
git fetch
创建一个名为
refs/remotes/origin/*
的ref


因此,检查ref名称的前缀是正确的方法。

一个选项是列出所有远程分支,并检查您感兴趣的分支是否在此列表中:

List<Ref> remoteBranches = git.branchList().setListMode(ListMode.REMOTE).call()
详见。

术语“本地分支机构”通常指REF/HEAD中的REF。
术语“远程分支”通常指REF/remotes中的REF

要仅列出您使用的本地分支,请执行以下操作:
git branch
git.branchList().call()

要仅列出您使用的远程分支,请执行以下操作:
git branch-r
git.branchList().setListMode(ListMode.REMOTE).call()

要同时列出本地和远程分支,请使用:
git branch-a
git.branchList().setListMode(ListMode.All).call()

中相应的代码如下所示:

if(listMode==null){
refList=repo.getRefDatabase().getRefs(Constants.R_头);
}else if(listMode==listMode.REMOTE){
refList=repo.getRefDatabase().getRefs(Constants.R\u REMOTES);
}否则{
refList=newhashmap(repo.getRefDatabase().getRefs(
常数(R_头);
refList.putAll(repo.getRefDatabase().getRefs(
常数(R_REMOTES));
}

可以,但据我所知,“哈邦”的建议也是正确的。我无法找到一种相应的方法来仅迭代Map refList=git.getRepository().getRefDatabase().getRefs(Constants.R\u REMOTES)的本地分支;ListBranchCommand setListMode=git.branchList().setListMode(ListBranchCommand.ListMode.REMOTE);
List<Ref> remoteBranches = git.branchList().setListMode(ListMode.REMOTE).call()
Map<String, Ref> refList = repo.getRefDatabase().getRefs(Constants.R_REMOTES);
if (listMode == null) {
        refList = repo.getRefDatabase().getRefs(Constants.R_HEADS);
} else if (listMode == ListMode.REMOTE) {
        refList = repo.getRefDatabase().getRefs(Constants.R_REMOTES);
} else {
        refList = new HashMap<String,Ref>(repo.getRefDatabase().getRefs(
                        Constants.R_HEADS));
        refList.putAll(repo.getRefDatabase().getRefs(
                        Constants.R_REMOTES));
}