git显示远程分支,并过滤掉HEAD和任何其他符号引用

时间:2016-11-08 20:00:05

标签: git

我正在编写一个带有git repo的脚本,它为每个远程分支运行一个测试。我使用以下命令获取远程分支的名称:

$ git branch -l -r
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/br1

然而,我也有符号引用,例如HEAD。如何过滤出HEAD和任何其他符号引用?

1 个答案:

答案 0 :(得分:2)

每当您想要对一组引用进行操作时,正确的管道(脚本能够)命令可能是git for-each-ref

在这种情况下,例如:

$ git for-each-ref --format '%(refname)' refs/remotes |
> while read ref; do
>     if git symbolic-ref -q $ref > /dev/null; then
>         echo sym $ref
>     else
>        echo reg $ref
>    fi
> done
sym refs/remotes/origin/HEAD
reg refs/remotes/origin/maint
reg refs/remotes/origin/master
reg refs/remotes/origin/next
reg refs/remotes/origin/pu
reg refs/remotes/origin/todo

要完全跳过符号引用,您可以将if / then子句更改为if ! git symbolic-ref -q $ref > /dev/null; then(并完全删除else)。要使用符号引用及其目标执行有趣的操作,请将git symbolic-ref的输出保存在变量中,而不是将其重定向到/dev/null(但保留-q以防止它抱怨所有非符号引用的stderr。)

for-each-ref命令允许您操作任何合理的引用子集,包括特定的远程控制或所有本地分支(refs/heads)。