Я пытаюсь написать сценарий ткани, который выполняет git commit
; однако, если фиксировать нечего, git завершает работу со статусом 1
. Сценарий развертывания принимает это как неудачное и завершает работу. Я действительно хочу обнаруживать фактические сбои для фиксации, поэтому я не могу просто дать ткани игнорировать git commit
сбои. Как я могу позволить игнорировать сбои при пустой фиксации, чтобы развертывание могло продолжаться, но все же выявлять ошибки, возникающие при сбое реальной фиксации?
def commit():
local("git add -p && git commit")
git diff
это «фарфоровая» команда, которую не следует использовать для написания сценариев. Скорее всего, вы хотитеgit diff-index --quiet HEAD || git commit -m 'bla'
. См. Также этот ответ .git diff --quiet --exit-code --cached
заключается в том, что он будет оценивать1
(false) только для измененных файлов, которые не были подготовлены для фиксации (не добавленные файлы). Проголосовавший за комментарий - лучшее решение для учета новых файлов и удалений.git diff-index --quiet HEAD || git commit -m 'bla'
должен быть ответом на этот вопрос.На
git commit
странице руководства :источник
-p
хоть и пропустил , но все жеwith settings(warn_only=True): run('git commit ...')
Это заставляет ткань игнорировать сбой. Имеет то преимущество, что не создает пустых коммитов.
Вы можете обернуть его дополнительным слоем,
with hide('warnings'):
чтобы полностью подавить вывод, в противном случае вы получите примечание в выводе фабрики, что фиксация не удалась (но fabfile продолжает выполняться).источник
попробуй / поймай ребенка!
from fabric.api import local from fabric.colors import green def commit(message='updates'): try: local('git add .') local('git commit -m "' + message + '"') local('git push') print(green('Committed and pushed to git.', bold=False)) except: print(green('Done committing, likely nothing new to commit.', bold=False))
источник
except:
, используйтеexcept Exception
или что-то в этом роде.