У меня есть пользовательская команда 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
Исходя из ответа на этот вопрос Я пытаюсь создать решение, которое по-прежнему выводит результат git branch -d
, но если его не удается удалить, проглотить (скрыть) сообщение об ошибке и вместо этого выведите собственное сообщение об ошибке.
Проблема в том, что сообщение об условной ошибке никогда не срабатывает (для тех веток, которые нельзя удалить с помощью git branch -d
).