有没有办法确定分支是使用JGit的远程或本地分支(或两者)?我有:
Map<String, Ref> allRefs = git.getRepository().getAllRefs();
Collection<Ref> values = allRefs.values();
for (Ref ref : values) {
refs.add(ref.getName());
}
给出:
HEAD
refs/heads/tmp01
refs/heads/master
refs/heads/newFeatureBranch
refs/heads/sampleBranch
refs/remotes/origin/master
refs/remotes/origin/newFeatureBranch
所以 newFeatureBranch 既是本地又是远程分支。目前我检查ref.getName()是否包含“remotes / origin”。但有没有更好的方法来确定分支是远程还是本地?
答案 0 :(得分:2)
在git中,所有分支都是本地分支。它们都位于.git/refs
中的本地存储库中,并且只是指向本地提交的指针。
您所谓的“远程分支”只是由git fetch
创建的本地分支。
如何调用这些“远程分支”由git config remote.origin.fetch
确定,git fetch
通常只是告诉refs/remotes/origin/*
创建名为{{1}}的参考号。
因此,检查引用名称的前缀是正确的方法。
答案 1 :(得分:2)
术语“本地分支”通常指refs / heads中的引用 术语“远程分支”通常指refs / remotes中的引用。
仅列出您使用的本地分支:
git branch
或git.branchList().call()
仅列出您使用的远程分支:
git branch -r
或git.branchList().setListMode(ListMode.REMOTE).call()
要列出本地和远程分支,请使用:
git branch -a
或git.branchList().setListMode(ListMode.All).call()
ListBranchCommand.java的相应代码为:
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));
}
答案 2 :(得分:1)
一个选项是列出所有远程分支,并检查您感兴趣的分支是否在此列表中:
List<Ref> remoteBranches = git.branchList().setListMode(ListMode.REMOTE).call()
您可以在BranchCommandTest JGit单元测试中找到branchList()
的更多示例。
另一种选择是仅从存储库获取远程引用:
Map<String, Ref> refList = repo.getRefDatabase().getRefs(Constants.R_REMOTES);
在ListBranchCommand中查看更多内容。