git 如果删除远程作为别名,则删除本地分支
git delete local branch if remote is deleted as alias
我是 git 的新手,我想为这个命令设置一个别名,但遇到了一些麻烦。
git fetch -p &&git branch -vv|grep ': gone]'|awk '{print }'|xargs git branch -D
这是此处问题的函数。
Remove local branches no longer on remote
该函数对我来说非常有用,但是当我尝试将它放入别名时,它运行但不起作用。任何建议将不胜感激。这就是它在我的配置中的样子。
[alias]
deletedone = "!f() { git fetch -p &&git branch -vv|grep ': gone]'|awk '{print }'|xargs git branch -D;}"
你只需要在别名的定义中添加"; f"
。
也就是说:
[alias] deletedone = "!f() { git fetch -p && git branch -vv | grep ': gone]' | awk '{print }' | xargs git branch -D; }; f"
或等同,运行命令:
git config alias.deletedone '!f() { git fetch -p && git branch -vv | grep '\'': gone]'\'' | awk '\''{print }'\'' | xargs git branch -D; }; f'
或使别名成为全局别名(独立于任何 repo):
git config --global alias.deletedone '!f() { git fetch -p && git branch -vv | grep ": gone]" | awk '\''{print }'\'' | xargs git branch -D; }; f'
编辑: 由于别名的原始版本不够健壮,如本 comment 中所指出的,我进行了一些调整,最终获得以下内容版本:
git config --global alias.deletedone '!f() { git fetch -p && git branch -vv | \
perl -wne '\''print "\n" if m/^\s*(\S+)\s+[0-9a-f]+\s+\[\S+: gone\]/;'\'' | \
xargs git branch -d; }; f'
您正在定义一个函数,但从未 运行 它。据我所知,根本不需要定义一个。
git config --global alias.deletedone '!bash -c "git fetch -p && git branch -vv | grep \': gone]\' | awk \'{print }\' | xargs git branch -D" -'
不是在我可以测试的计算机上,但它应该可以做你想做的事(可能某处存在语法错误)。
调用新的 bash 实例会在 git 外部调用时将其放入自己的范围内。当我不使用这种语法时,我遇到了奇怪的范围问题。
我是 git 的新手,我想为这个命令设置一个别名,但遇到了一些麻烦。
git fetch -p &&git branch -vv|grep ': gone]'|awk '{print }'|xargs git branch -D
这是此处问题的函数。 Remove local branches no longer on remote
该函数对我来说非常有用,但是当我尝试将它放入别名时,它运行但不起作用。任何建议将不胜感激。这就是它在我的配置中的样子。
[alias]
deletedone = "!f() { git fetch -p &&git branch -vv|grep ': gone]'|awk '{print }'|xargs git branch -D;}"
你只需要在别名的定义中添加"; f"
。
也就是说:
[alias] deletedone = "!f() { git fetch -p && git branch -vv | grep ': gone]' | awk '{print }' | xargs git branch -D; }; f"
或等同,运行命令:
git config alias.deletedone '!f() { git fetch -p && git branch -vv | grep '\'': gone]'\'' | awk '\''{print }'\'' | xargs git branch -D; }; f'
或使别名成为全局别名(独立于任何 repo):
git config --global alias.deletedone '!f() { git fetch -p && git branch -vv | grep ": gone]" | awk '\''{print }'\'' | xargs git branch -D; }; f'
编辑: 由于别名的原始版本不够健壮,如本 comment 中所指出的,我进行了一些调整,最终获得以下内容版本:
git config --global alias.deletedone '!f() { git fetch -p && git branch -vv | \
perl -wne '\''print "\n" if m/^\s*(\S+)\s+[0-9a-f]+\s+\[\S+: gone\]/;'\'' | \
xargs git branch -d; }; f'
您正在定义一个函数,但从未 运行 它。据我所知,根本不需要定义一个。
git config --global alias.deletedone '!bash -c "git fetch -p && git branch -vv | grep \': gone]\' | awk \'{print }\' | xargs git branch -D" -'
不是在我可以测试的计算机上,但它应该可以做你想做的事(可能某处存在语法错误)。
调用新的 bash 实例会在 git 外部调用时将其放入自己的范围内。当我不使用这种语法时,我遇到了奇怪的范围问题。