我有一个自定义的Git命令,该命令有条件地删除具有远程控制的本地分支:
#!/usr/bin/env bash
GONE_BRANCHES=$(git branch -vv | grep 'origin/.*: gone]' | awk '{print $1}')
if [ -z "$GONE_BRANCHES" ]; then
echo "Could not find any local branches that have a gone remote"
exit 0
fi
if [ "$1" = "-f" ]; then
echo "$GONE_BRANCHES" | xargs git branch -D
else
echo "$GONE_BRANCHES" | xargs git branch -d 2>/dev/null
if [ $? -eq 1 ]; then
FAILED_TO_DELETE="true"
fi
fi
if [ "$FAILED_TO_DELETE" = "true" ]; then
echo "error: Some local branches are not fully merged."
echo "If you are sure you want to delete them, run 'git-glean -f'"
fi
基于对this question的回答,我试图构建一个解决方案,该解决方案仍输出git branch -d
的结果,但是如果无法删除该结果,请吞下(隐藏)错误消息并回显而是自定义错误消息。
问题是条件错误消息永远不会触发(对于那些无法用git branch -d
删除的分支)。
答案 0 :(得分:3)
在xargs
联机帮助页中指出:
如果进程以1状态退出,则退出状态
xargs退出并显示以下状态:
如果成功,则为0
123,如果以状态1-125退出命令的任何调用
Xargs将不会以1"
状态退出。将您的条件更改为:
echo "$GONE_BRANCHES" | xargs git branch -d 2>/dev/null
if [ $? -ne 0 ]; then