git服务器上合并代码后,远程的分支一般删除了,这时候本地的分支需要自己删除,有时候分支用的多,会攒一大堆这样的本地分支。
写了一个del_gone_branch.py:
import re
import fileinput
import os
def main():
pattern = re.compile(r'\s*(\w+)\s+[^\[]+\[[^:]+:\s*gone\].*$')
with fileinput.input() as f_input:
for line in f_input:
print(line, end='')
ret = pattern.match(line)
if ret:
print("--------")
os.system("git br -D "+ret.group(1))
else:
print("++++++++")
if __name__ == '__main__':
main()
使用:
git branch -vv | python del_gone_branch.py
git branch -vv 的输出类似如下:
branch_xxxxxxx 3bf30ecd0 [origin/branch_xxxxxxx: gone] cxxxxxxxxxxxxxxxxxxxxxxxxxxx
这里解释一下正则表达式:
\s* 前面可能有空白
(\w+) 分支名称
\s+ 分割空白
[^\[]+ 直到左中括号
\[[^:]+:\s*gone\] 中括号,里面要有gone,否则不匹配。
.*$ 一直到行尾。
补充修改:后面发现,如果分支名里有“-”,匹配不上。修改为:
r'\s*([\w\-]+)\s+[^\[]+\[[^:]+:\s*gone\].*$'
git的分支名是可以含有中划线的。