当前位置: 首页 > 知识库问答 >
问题:

确定一个分支是远程的还是本地的(使用JGit)?

单于亮
2023-03-14

有没有办法使用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”。但是,有没有更好的方法来确定分支是远程的还是本地的?

共有3个答案

谭献
2023-03-14

一个选项是列出所有远程分支,并检查您感兴趣的分支是否在此列表中:

List<Ref> remoteBranches = git.branchList().setListMode(ListMode.REMOTE).call()

您可以在JGit的BronchORDTest单元测试中找到更多branchList()的示例。

另一个选项是仅从存储库获取远程引用:

Map<String, Ref> refList = repo.getRefDatabase().getRefs(Constants.R_REMOTES);

请参阅ListBranchCommand中的更多内容。

魏成济
2023-03-14

在git中,所有分支都是本地分支。它们都生活在的本地存储库中。git/refs和都只是指向本地提交的指针。

你所说的“远程分支”只是由git fetch创建的本地分支。

如何调用这些“远程分支”由git config remote决定。起源fetch,它通常会简单地告诉git fetch创建一个名为refs/remotes/origin/*的ref。

因此,检查ref名称的前缀正是正确的方法。

麹渊
2023-03-14

术语“本地分支”通常指REF/heads中的REF
术语“远程分支”通常指REF/remotes中的REF。

要仅列出您使用的本地分支:git branchgit。branchList()。call()

要仅列出您使用的远程分支:git branch-rgit。branchList()。setListMode(ListMode.REMOTE)。call()

要同时列出本地和远程分支,请使用:git branch-agit。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));
}
 类似资料:
  • 我需要确定消息的发送者是Akka集群中的本地行为者还是远程行为者之一。目前我找到的唯一方法是 在每个节点上,路由器管理许多参与者来完成工作。工作参与者将结果发送回本地主参与者,并通过发件人引用分配新的职务。主参与者还定期向其他节点的主参与者发送结果,确保数据在不同节点的主参与者之间随机“混合”。在数据来自远程参与者的情况下,接收主机不应试图分配新的工作。它本质上是一个带有混合的岛屿方法的实现。

  • 问题内容: 这与另一个用户先前提出的问题有关,该问题询问如何在EclipseIDE中检测代码是否正在运行。 我注意到Eclipse总是使用而不是来启动程序。(这并不意味着启动的程序是从Eclipse启动的)。 我可以找到使用传递的参数 但这并不能告诉我它是使用还是启动的。 有没有办法找出它是使用还是启动的? 为什么Eclipse用于启动程序? 问题答案: System.console()将返回,因

  • 问题内容: 有没有办法找出采用varargs的Java函数(或构造函数)是否实际上是用varargs或数组调用的? 说我有以下几点: 构造函数可以用单个参数调用,以后可以更改,如果我不复制构造函数中的数组,这些更改也将应用于成员变量,对吗?但是,如果用几个s 调用构造函数,则没有其他对array *的引用可以在类之外稍后对其进行更改,因此我可以直接对其进行分配。我可以告诉构造函数(或通常带有var

  • 问题内容: 我将从服务器接收JSON对象或数组,但是我不知道它将是什么。我需要使用JSON,但是要这样做,我需要知道它是对象还是数组。 我正在使用Android。 有没有人有这样做的好方法? 问题答案: 我找到了更好的方法来确定: tokenizer可以返回更多类型:http : //developer.android.com/reference/org/json/JSONTokener.html

  • 在你明确地决定将一个本地分支发布到远程仓库之前,这些在你本地计算机上创建的分支是不能被其他的团队成员看到的,它只是你的私有分支。这就意味着,你可以保留某些改动仅仅在你私有的本地分支上,而与其他团队成员分享一些其它分支上的改动。 现在让我们来分享 “contact-form” 分支(它直到现在还仅仅是个私有的本地分支)到 “origin” 远程上: $ git checkout contact-fo

  • 现在我们得到了一个干净的工作副本,第一件事就是要切换到,或者说 “签出(check out)” 那个新建的分支上去: $ git checkout contact-form 概念 签出(Checkout),HEAD,和你的工作副本(Working Copy) 分支会自动指向最后一次的提交。而且,一个提交也对应项目中的一个特定版本,Git 总是非常地清楚定位哪些文件属于该分行。 在这个时间点,仅仅