我正在尝试列出我使用的所有Git远程分支
git branch -r
这不幸也给了我
origin/HEAD -> origin/master
我正在使用带有for
的shell脚本来遍历分支名称。它将origin/HEAD
,->
和origin/master
视为单独的分支名称,从而导致错误。为避免这种情况,我使用grep -v
过滤掉->
for x in $(git branch -r | grep -v '->')
do #stuff
done;
但我的grep -v '->'
不起作用。 \-\>
或^->
(我对正则表达式不是很熟悉)
我如何完成我的需要? (在Git中,首先不输出origin/HEAD -> origin/master
,或在grep
中输出
答案 0 :(得分:6)
您是否尝试过grep -v '\->'
我认为你必须只看看破折号。
答案 1 :(得分:6)
grep快速的事情:
grep -e expr
允许expr
类似于选项,而不会将解释为选项。因此,您可以使用-e
找到grep -e -e
的匹配项,或使用->
跳过grep -v -e '->'
。
git的一般规则:对于带引用的脚本,请使用git for-each-ref
命令。
答案 2 :(得分:2)
编写脚本时使用管道命令:
git show-ref |grep remotes/origin
git show-ref
列出所有分支,标记,然后按原点过滤
您在输出中获得SHA1和前缀,以便使用
删除它git show-ref |grep remotes/origin| cut -d" " -f 2 | cut -d/ -f 3-
第一个cut
从列表中删除哈希值,第二个cut
删除refs/remotes
答案 3 :(得分:1)
大多数gnu工具支持--
选项结束,这正是针对这种情况的。
你可以写:
grep -v -- ->
答案 4 :(得分:1)
你是如此亲密:
for x in $(git branch -r | grep -v '\->')
答案 5 :(得分:0)
尝试使用此sed命令替换grep命令。
sed s'+^.*\-\>.*$++g'
快速解释:
分隔符是+字符。所以用空字符串替换^。 - >。。
^ =行的开头
。* =任何字符
- >感兴趣的模式
。* =任何其他字符序列
$ =行尾