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

5
我正在开发一个Git客户端,现在正试图实现特定分支的检出。我有一个下拉框,其中填充了分支名称,并希望找出哪个分支是默认的,以便在连接到有效的Git存储库时将其设置为下拉框中预选的项目。
如下所示,我正在列出所有远程分支,但我无法弄清楚哪个是默认分支。
Map<String, Ref> callAsMap = Git.lsRemoteRepository()
    .setRemote("https://github.com/example")
    .setCredentialsProvider(credentialsProvider)
    .callAsMap();

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


1
嗯,我觉得没有人解决了这个问题。但最终,似乎它无法真正检测出哪一个是默认值,因为可能没有默认值被广告宣传,对吧? - Sorin Adrian Carbunaru
@SorinAdrianCarbunaru,你有没有找到使用Jgit获取默认分支的解决方案? - Swapnil Gangrade
嗯,这是很久以前的事了,但似乎我没有找到解决方案。我只是针对我的用例绕过了这个问题。 - Sorin Adrian Carbunaru
@SorinAdrianCarbunaru,你的解决方法是什么?你能分享一些细节吗? - Swapnil Gangrade
抱歉回复晚了,我正在育儿假期中。 - Sorin Adrian Carbunaru
显示剩余3条评论
2个回答

2

Repository::getFullBranch 返回本地仓库当前分支。

要获取远程仓库的默认分支,您需要请求HEAD引用。贴出的代码片段返回的映射应该包含一个键为HEAD的条目和(如果我没弄错的话)表示默认分支名称的值。

如果HEAD引用对象ID,则可以使用repository.getRefDatabase().getRefs(Constants.R_REMOTES)获取所有远程引用列表以查找HEAD ID。此方法可能不准确,因为多个引用可能指向相同的对象ID。

请注意,远程存储库无需宣传默认分支。

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


嗯,我昨天已经尝试过了,我记得HEAD的名称只是一个哈希码。我想找到“真正”的名称,比如masterdev... - Sorin Adrian Carbunaru
嗯,这正是我担心的。请查看我的编辑答案。 - Rüdiger Herrmann

0

在使用.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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接