Подтвердить что ты не робот

Возвращает ли git конкретные коды ошибок возврата?

Подобно ошибкам слияния или ошибкам переустановки. Имеет ли он уникальный код ошибки?

4b9b3361

Ответ 1

Я устанавливаю тест на провал. Это то, что я получил:

$ git merge newbranch
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.

$ echo $?
1

Git возвращает 0, когда он сливается правильно, как и ожидалось.

Ответ 2

Короче говоря, нет. Вы увидите код выхода 1 для ошибок и 0 для успеха.

С быстрым grepping источника, некоторые из ожидаемых 127 и 128 для их конкретных целей (команда не найдена, уже сообщенные ошибки) и несколько необычных кодов в нескольких местах, но для запуска мельницы ошибки, все exit(1).

Ответ 3

Запуск git status в репозитории не git возвращает 128, а не 1, что полезно при быстром определении того, существует или нет репозиторий git.

Ответ 4

Ошибка 128, без сообщения об ошибке из git, может быть проблемой для "неожиданной проблемы".

Я получал это от операций, которые нуждались в изменении файлов под .git(например, "git checkout -- myfile", чтобы вернуть измененный файл) другим пользователем. (В моем случае "chmod -R og+w .git" исправил это, естественно, не делайте этого, если вы не понимаете последствия безопасности для вашего случая!)

Ответ 5

git push --delete origin a_remote_tag_name

Возвращает 256, если тег не существует с использованием git-версии 1.8.3.1

Было бы неплохо иметь сводный список конкретных кодов возврата, возвращаемых каждой командой, и того, что они указывают. Это также может помочь предотвратить изменение значений кода возврата (на какие сценарии автоматизации может положиться).

Ответ 6

Git 2.24 (Q4 2019) иллюстрирует, как команды git возвращают код.

См. коммит 50094ca, коммит c1a6f21, коммит 854b5cb, коммит dd2b6b6, коммит 6bd26f5, коммит c6ec6da, коммит f2e2fa8, коммит 460609c, коммит 92014b6, коммит 0ab74e9, коммит cb46c40, зафиксировать b562a54 (27 августа 2019 г.) и зафиксировать fe49814 (20 августа 2019 г.) Дентоном Лю (Denton-L).
(Merged by Junio C Hamano -- [TG42] -- in commit 1c6fc94, 30 Sep 2019)

t4014: прекратить терять коды возврата команд git

В настоящее время есть два способа, где коды возврата команд Git потерянный.

Первый способ - когда команда находится в восходящем направлении канала. В pipe, используется только код возврата последней команды. Таким образом, все остальные Команды будут маскировать свои коды возврата.
Перепишите каналы так, чтобы не было команд Git выше по течению.

Другой способ - когда команда находится в подоболочке без назначения.
Код возврата будет потерян в пользу окружающей команды.
Перепишите экземпляры этого так, чтобы команды Git выводили в файл и окружающие команды вызывают только субоболочки с командами не-Git.

Поэтому вместо того, чтобы писать:

git cat-file commit rebuild-1 | grep "^Side .* with .* backslash-n"

Тип:

git cat-file commit rebuild-1 >actual &&
    grep "^Side .* with .* backslash-n" actual