Ответ 1
Предварительно зайдите это условие, проверив код выхода git diff?
Например (в оболочке):
git add -A
git diff-index --quiet HEAD || git commit -m 'bla'
EDIT: Исправлена команда git diff
в соответствии с комментарием Хольгера.
Я пытаюсь написать ткань script, которая делает git commit
; однако, если нечего делать, git завершает работу со статусом 1
. Развертывание script принимает это как неуспешное и завершает работу. Я хочу обнаружить фактические сбои в фиксации, поэтому я не могу просто дать теневое изображение игнорировать ошибки git commit
. Как я могу разрешить игнорирование пустых ошибок, чтобы развертывание продолжалось, но все же ловить ошибки, вызванные сбоем реального коммита?
def commit():
local("git add -p && git commit")
Предварительно зайдите это условие, проверив код выхода git diff?
Например (в оболочке):
git add -A
git diff-index --quiet HEAD || git commit -m 'bla'
EDIT: Исправлена команда git diff
в соответствии с комментарием Хольгера.
На странице git commit
man:
--allow-empty
Usually recording a commit that has the exact same tree as its
sole parent commit is a mistake, and the command prevents you
from making such a commit. This option bypassesthe safety, and
is primarily for use by foreign SCM interface scripts.
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))