Как правильно получить код ошибки от команды git в batch скрипте?

Здравствуйте. У меня была самая банальная потребность, с помощью batch скрипта, обновлять локальный репозиторий git и в случае какой-либо ошибки возвращать лог и код ошибки. Но я натолкнулся на такую очень странную ситуацию:
Команда git возвращает ошибку (IF ERRORLEVEL 1 = TRUE, то есть код ошибки >= 1, то есть != 0), но при этом код ошибки - echo %errorlevel% выводит "0".
Пробовал другой метод проверки, использовал логическое ИЛИ (то есть выполнить вторую часть, только если предыдущая вернула ошибку, оператор "||" ) и то же самое.
Поэтому возникает несколько вопросов:
1) сам код ошибки мне не так важен, но из-за этого я сомневаюсь в том, можно ли в качестве проверки использовать "IF ERRORLEVEL 1" ? Надёжно это?
2) Есть ли какой-то способ всё-таки получить код ошибки?
3) Как такое вообще возможно?!

Все эти варианты выводят "ERRORCODE_IS_0":
git checkout master && git remote update -p && git merge --ff-only 
IF ERRORLEVEL 1 echo ERRORCODE_IS_%errorlevel%

git checkout master && git remote update -p && git merge --ff-only || echo ERRORCODE_IS_%errorlevel%


Ошибку генерю просто: невозможность fast-forward'а. Вот собственно вывод команды:
Already on 'master'
Your branch and 'origin/master' have diverged,
and have 14 and 19 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
Fetching origin
fatal: Not possible to fast-forward, aborting.
ERRORCODE_IS_0
  • Вопрос задан
  • 542 просмотра
Решения вопроса 1
@res2001
Developer, ex-admin
Получить код ошибки:

[команда]
set err=%errorlevel%
echo.Дальше делаем с кодом ошибки все что захотим: %err%

Обрабатывать можно как рекомендуют в справке по if /?:

goto answer%errorlevel%
:answer1
...
:answer2
...

if errorlevel 1 - вполне надежно использовать, но слишком громоздкая конструкция и одноразовая. Я обычно предпочитаю вариант с оператором ||.
Кстати, многие утилиты командной строки забивают на возврат кода ошибки :(
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы