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

Sor*_*aru 5 java git jgit

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

我列出了所有远程分支,如下所示,但我无法弄清楚哪个是默认分支。

Map<String, Ref> callAsMap = Git.lsRemoteRepository()
    .setRemote("https://github.com/example")
    .setCredentialsProvider(credentialsProvider)
    .callAsMap();
Run Code Online (Sandbox Code Playgroud)

那么,有没有一种方法(标准或“hacky”)来检测哪个Ref对象代表默认分支?我怎样才能得到它的名字?

Rüd*_*ann 2

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

要获取远程存储库的默认分支,您需要询问其HEAD引用。您发布的代码片段返回的地图应该包含一个带有键的条目HEAD和(如果我没有记错的话)一个表示默认分支名称的值。

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

请注意,远程存储库不需要通告默认分支。

另请参阅这些帖子,了解 C-Git 如何查找默认分支:git - 如何获取默认分支?以及什么决定了“git clone”之后的默认分支?