Java 使用JGit获取远程存储库的默认分支

Java 使用JGit获取远程存储库的默认分支,java,git,jgit,Java,Git,Jgit,我正在一个Git客户机上工作,现在我正在尝试实现特定分支的签出。我有一个用分支名称填充的组合框,我想找出哪个分支是默认的,这样我可以在连接到有效的Git存储库时将其设置为组合框中的预选项 我列出了所有远程分支,正如您在下面看到的,但我无法确定哪一个是默认分支 Map callAsMap=Git.lsRemoteRepository() .setRemote(“https://github.com/example") .setCredentialsProvider(credentialsProvi

我正在一个Git客户机上工作,现在我正在尝试实现特定分支的签出。我有一个用分支名称填充的组合框,我想找出哪个分支是默认的,这样我可以在连接到有效的Git存储库时将其设置为组合框中的预选项

我列出了所有远程分支,正如您在下面看到的,但我无法确定哪一个是默认分支

Map callAsMap=Git.lsRemoteRepository()
.setRemote(“https://github.com/example")
.setCredentialsProvider(credentialsProvider)
.callAsMap();

那么,有没有一种方法(标准或“hacky”)来检测哪个
Ref
对象代表默认分支?如何获取其名称?

存储库::getFullBranch返回本地存储库的当前分支

要获取远程存储库的默认分支,您需要请求其
HEAD
ref。您发布的代码段返回的映射应该包含一个带有键
HEAD
的条目,以及一个表示默认分支名称的值(如果我没有弄错的话)

如果
HEAD
引用对象id,则可以使用
repository.getRefDatabase().getRefs(Constants.R\u REMOTES)
获取所有远程引用的列表,以查找HEAD id。这种方法可能不准确,因为多个引用可能指向同一对象id

请注意,远程存储库不需要公布默认分支


另请参阅这些帖子,了解C-Git如何查找默认分支:并且)

您应该能够在这之后为默认分支链接一个
.get(“HEAD”)
。尝试了这个,但是我如何才能找到默认分支的名称?如果我调用
getName()
,答案是
HEAD
。但我期望类似于
master
,因为这是我的一个回购协议默认分支的名称。如果您觉得有答案解决了问题,请单击绿色复选标记将其标记为“已接受”。这有助于将注意力集中在仍然没有答案的老帖子上。嗯,我觉得没有人能解决这个问题。但最后,它似乎无法真正检测出哪个是默认值,因为可能没有发布默认值,对吧?嗯,我昨天已经尝试过了,我记得
HEAD
的名称只是一个hashcode。我想找到“真实”的名字,比如
master
dev
…嗯,这就是我担心的。请看我编辑的答案。