所以我正在编写一些用于将SVN迁移到GIT的脚本,我们有一堆" old" SVN中的分支仍然存在,但不需要转移到GIT。 (恰好已经合并到主干的分支)。 经过一段时间的谷歌,我想出了以下内容:
$(git for-each-ref --format='%(refname:short)' --merged origin/trunk | grep '(?!origin\/trunk)origin\/.*')
传递给
git branch -D --remote _previouscommandgoeshere_
如果我只运行git for-each-ref --format='%(refname:short)' --merged origin/trunk
,我会得到以下输出:
origin/IR1091
origin/IR1102
origin/IR1105
...
origin/IR932
origin/Software
origin/trunk
origin/trunk@6792
origin/trunk@6850
当我添加grep
命令时,我得到0值。
然而,https://regexr.com/3ot1t让我觉得我的正则表达式正是我想做的事情。删除除trunk
分支以外的所有分支。
regexp / grep有什么问题? (注意我不是 linux / grep guru。这都是在windows git附带的bash中完成的)
答案 0 :(得分:2)
正则表达式是正确的,但默认情况下grep
不支持负面预测(?!
等PCRE表达式构造。您需要启用-P
标志以启用PCRE库,而不支持基本正则表达式引擎
.. | grep -oP '(?!origin\/trunk)origin\/.*'
或者在命令行上使用perl
正则表达式匹配,不需要设置任何标记
.. | perl -ne 'print if /(?!origin\/trunk)origin\/.*/'