我有这个命令删除了不再在repo中的所有本地分支,我试图在.gitconfig中添加:
git checkout master && git fetch -p && git branch -l | sed 's/* master//' > /tmp/gitlocal.txt && git branch -r | sed 's/origin\///' > /tmp/gitremote.txt && grep -Fxv -f /tmp/gitremote.txt /tmp/gitlocal.txt | xargs git branch -D
我试图将其作为别名,但我遇到了一些逃避问题
cleanbranches = "!f() { git checkout master && git fetch -p && git branch -l | sed 's/* master//' > /tmp/gitlocal.txt && git branch -r | sed 's/origin\///' > /tmp/gitremote.txt && grep -Fxv -f /tmp/gitremote.txt /tmp/gitlocal.txt | xargs git branch -D; }; f"
经过一些反复试验,我得出结论
sed 's/origin\///'
正在使别名中断。如果删除此部分,则执行命令(但它只删除每个分支,而不是保留一个仍然在repo上),并且没有错误
有关如何逃脱的任何帮助?
额外的,但不是必须的,如果你能解释一下别名的部分是什么以及为什么有3个斜杠?
答案 0 :(得分:3)
您可以使用不同的分隔符重写sed 's/origin\///'
,例如sed 's|origin/||'
(此命令从其输入中删除子字符串origin/
。)
因此可以使用以下方式设置别名:
git config --global alias.cleanbranches '!git checkout master && git fetch -p && git branch -l | sed "s/* master//" > /tmp/gitlocal.txt && git branch -r | sed "s|origin/||" > /tmp/gitremote.txt && grep -Fxv -f /tmp/gitremote.txt /tmp/gitlocal.txt | xargs git branch -D'
我不建议直接编辑.gitconfig
,因为很难获得转义权。我还删除了函数包装器(f() { ...; }; f
),因为我不认为它是必需的。
我也不建议以这种自动方式使用git branch -D
(我没有查看别名内的命令,所以我不知道这是否安全)。