我正在编写一个带有git repo的脚本,它为每个远程分支运行一个测试。我使用以下命令获取远程分支的名称:
$ git branch -l -r
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/br1
然而,我也有符号引用,例如HEAD。如何过滤出HEAD和任何其他符号引用?
答案 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
)。