特定的远程的分支名称列表的Git(Git list of branch names of speci

2019-07-28 20:46发布

怎样才可以得到一些远程起源的分支的所有名称?

我从开始--remote --list选项,但有多余的origin/HEAD -> origin/master消息,并从另一个起源的分支。

$> git branch --remote --list
  origin/HEAD -> origin/master
  origin1/develop
  origin1/feature/1
  origin1/feature/2
  origin1/feature/3
  origin1/master
  origin2/develop
  origin2/feature/1
  origin2/feature/2
  origin2/master

具体来源的分支可以与匹配<pattern>的选择,但冗余消息依然存在。 其实这种模式是不是真的正确,因为一些产地的名称可能是其他产地名称的子串,甚至一些分支。

$> git branch --remote --list origin1*
  origin1/HEAD -> origin/master
  origin1/develop
  origin1/feature/1
  origin1/feature/2
  origin1/feature/3
  origin1/master

什么是我寻找的是分支的名单origin1 ,其中任何一个我可以用git checkout命令。 类似的东西:

develop
feature/1
feature/2
feature/3
master

重要的是,它不应该做grepsedtail甚至ghc -e包装,只有真正的git力量,因为他们unsafeness和变异。

Answer 1:

重要的是,它不应该做grepsedtail甚至ghc -e包装,只有真正的git的力量,因为他们unsafeness和变异。

这仅适用于混帐瓷命令真(参见“ 什么是瓷器一词在Git中是什么意思? ”)

使用管道命令LS-远程 ,然后你就可以过滤它的输出。

LS-远程无参数仍然会列出远程端:

git@vonc-VirtualBox:~/ce/ce6/.git$ git ls-remote origin
8598d26b4a4bbe416f46087815734d49ba428523    HEAD
8598d26b4a4bbe416f46087815734d49ba428523    refs/heads/master
38325f657380ddef07fa32063c44d7d6c601c012    refs/heads/test_trap

但是如果你只问说,远程的负责人:

git@vonc-VirtualBox:~/ce/ce6/.git$ git ls-remote --heads origin
8598d26b4a4bbe416f46087815734d49ba428523    refs/heads/master
38325f657380ddef07fa32063c44d7d6c601c012    refs/heads/test_trap

最终的答案:

git@vonc-VirtualBox:~/ce/ce6/.git$ git ls-remote --heads origin  | sed 's?.*refs/heads/??'
master
test_trap

(是,它使用sed ,但一个管道命令的输出应该是足够稳定以被解析)



Answer 2:

的另一种方法,一些研究了同样的问题后,是:

git for-each-ref --format='%(refname:strip=2)' refs/remotes/<remote_name>

这将在点你上次读取给当地的裁判为命名远程的排序列表。

您可以调整该为他们的标签等。



Answer 3:

现有的答案都使用一些明确的问题(SED)不是想要的,是一个远程命令。

我发现这一点,避免了这两个问题,只使用本地的git命令和管道:

git rev-parse --remotes=origin | git name-rev --name-only --stdin

更新 :不是最佳下去,但保持它,如果有人知道如何改进它。 它列出了完整的远程包括,如果你没有本地分公司/遥控器/产地前缀,但只有当你有本地名称。 此外,它似乎跳过一些裁判如果有多个指向同一个SHA1。



文章来源: Git list of branch names of specific remote