【问题标题】:Git - show remote name of remote branchGit - 显示远程分支的远程名称
【发布时间】:2023-04-10 06:23:01
【问题描述】:

是否有显示远程分支的远程名称的 Git 命令?

目前我坚持使用 shell utils 从远程分支引用中提取远程名称...

$ echo "remote-name/branch-name" | sed -r 's;^([^/]+)/.*;\1;'
remote-name

有时出于验证目的传递它

$ git rev-parse --symbolic-full-name "remote-name/branch-name" | ...

不知道有没有类似的内置命令。

$ git wanted-command [wanted options] "remote-name/branch-name"
remote-name

我查看了rev-parse、remote 和ls-remote 的联机帮助页。

【问题讨论】:

  • git branch -av 应该这样做
  • 不,它显示所有分支,包括它们的跟踪(远程)分支(如果有的话)。我想使用官方 GIt 命令获取远程名称(如“origin”),而不是通过解析分支名称。
  • 你是对的。我的坏...

标签: git shell


【解决方案1】:

如果您从本地 引用而不是远程引用开始,则可以使用git for-each-ref 和%(upstream:remotename) 格式。

我将它与git symbolic-ref -q HEAD 一起使用以获取当前结帐的远程名称:

remote=$(git for-each-ref --format='%(upstream:remotename)' "$(git symbolic-ref -q HEAD)")

用最常见的遥控器演示:

% git for-each-ref --format='%(upstream:remotename)' "$(git symbolic-ref -q HEAD)" 
origin

【讨论】:

    【解决方案2】:

    不是最漂亮的解决方案,但我认为它通常应该可以工作。 (我觉得应该有更好的方法,但我现在想不出。)

    symref=$(git symbolic-ref --short HEAD)
    git config --local "branch.$symref.remote"
    

    并且,为了完整性和总结下面的一些 cmets,远程跟踪分支的名称(可能与本地存储库中的远程 ref 名称不同)可从branch.$symref.merge 获得.

    【讨论】:

    • 这是正确的方法。但是请注意,如果上面的输出是.,则“远程”是您自己的本地存储库,即您的本地分支foo 可能正在“跟踪”您自己的本地分支master。此外,如果您想知道分支的名称是 在远程 中的 branch.$symref.name,但由于 fetch = 行的工作方式,本地远程跟踪分支可能有一些其他的名称(但这很少见,可能到了不存在的地步,只是可能)。
    • @torek 你能再解释一下最后一点吗(回复:fetch =)?
    • OK:通常如果您查看像 origin 这样的遥控器(在 .git/config 中),您会看到:fetch = +refs/heads/*:refs/remotes/origin/*。这就是他们的master 变成你的origin/master 的方式,这两个*s 是匹配的。但如果你找到的是fetch = +refs/heads/master:refs/remotes/origin/xyzzy,他们的 master 变成你的 origin/xyzzy。如果你想跟踪他们的,你应该有branch.master.remote = origin 但branch.master.merge = master,即使你正在跟踪origin/xyzzy。这是一个历史性的意外。
    • (空间不足)merge 行列出了在 their 存储库中已知的分支名称,因此要查找在您自己的存储库中如何知道该分支,您必须通过与遥控器关联的fetch = 行对其进行映射。将该映射的输出设为origin/master 以外的任何内容非常疯狂,但这是允许的。不过,如果你做了这么疯狂的事情,我实际上并不确定 git 的哪些部分表现得好或不好。
    • @torek 啊,谢谢。是的,具体的fetch 裁判很奇怪。不过还有一个问题。什么设置 branch.$symref.name 以及记录在哪里?我在任何地方都没有看到它。
    猜你喜欢
    • 2021-09-09
    • 2021-04-15
    • 2012-04-21
    • 2011-10-28
    • 2012-10-22
    • 2018-11-05
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多