繁体   English   中英

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

[英]Get the default branch of a remote repository with JGit

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

我列出了所有远程分支,如下所示,但我不知道哪个是默认分支。

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

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

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

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

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

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

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

使用.get("HEAD")链接后,如果它是符号链接,您可以使用.getTarget().getName()链接它以“提取”其名称,例如

Map<String, Ref> callAsMap = Git.lsRemoteRepository()
.setRemote("https://github.com/example")
.setCredentialsProvider(credentialsProvider)
.callAsMap().get("HEAD").getTarget().getName()

资料来源: https://www.eclipse.org/lists/jgit-dev/msg03320.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM