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

Как git зафиксировать ничего без ошибки?

Я пытаюсь написать ткань script, которая делает git commit; однако, если нечего делать, git завершает работу со статусом 1. Развертывание script принимает это как неуспешное и завершает работу. Я хочу обнаружить фактические сбои в фиксации, поэтому я не могу просто дать теневое изображение игнорировать ошибки git commit. Как я могу разрешить игнорирование пустых ошибок, чтобы развертывание продолжалось, но все же ловить ошибки, вызванные сбоем реального коммита?

def commit():
    local("git add -p && git commit")
4b9b3361

Ответ 1

Предварительно зайдите это условие, проверив код выхода git diff?

Например (в оболочке):

git add -A
git diff-index --quiet HEAD || git commit -m 'bla'

EDIT: Исправлена ​​команда git diff в соответствии с комментарием Хольгера.

Ответ 2

На странице 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.

Ответ 3

with settings(warn_only=True):
  run('git commit ...')

Это приводит к тому, что ткань игнорирует отказ. Имеет преимущество не создавать пустые коммиты.

Вы можете перенести его на дополнительный слой with hide('warnings'):, чтобы полностью отключить вывод, иначе вы получите заметку на выходном материале, которая была выполнена сбой (но файл fabfile продолжает выполняться).

Ответ 4

попробуйте/поймайте ребенка!

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))