Вам нужно будет более точно определить, что вы подразумеваете здесь под "атомным".В частности, хотя:
[Что] я хочу знать, есть ли [есть] ли вероятность того, что некоторые из исправлений будут применены, а другие приведут к ошибке
Конечно, git am <em>path</em>
может потерпеть неудачу, и документация git am
описывает, что происходит в этом случае.Если исправления, отформатированные в почтовом ящике, содержат, скажем, семь частей, а первые три применены корректно, но у четвертого возник конфликт слияния или другой сбой, первые три действительно будут применены, а четвертый действительно еще не применен.Если причиной сбоя является конфликт слияния, индекс и рабочее дерево будут в состоянии частично слияния.Если патч просто не был применен вообще, индекс и рабочее дерево будут соответствовать состоянию, созданному путем применения третьего коммита.В любом случае, git am
выйдет ненулевым.(В этот момент вы можете использовать git am --abort
, чтобы вернуть все обратно к тому, что было до того, как вы применили исправления без , или вручную исправить проблему, а затем запустить git am --continue
, чтобы возобновить процесс..)
В документации gitpython упоминается, что git.exc.GitCommandError
вызывается, если основная команда Git выходит из ненулевого значения.Поэтому вы бы поймали здесь исключение.
Дополнительное примечание: except Exception
обычно слишком широка в Python.Обычно вы должны отлавливать определенные исключения, которые вы ожидаете здесь, которые в этом случае могут быть git.exc.GitCommandError
(для git am
существует и работает, но сообщил о сбое ) и git.exc.GitError
(для * 1029)* что-то вообще пошло не так, например, бинарный файл Git не установлен, или Git утверждает, что это вообще не репозиторий и т. д.).