<질문>
다음을 수행하는 패브릭 스크립트를 작성하려고 합니다.git commit
; 그러나 커밋할 것이 없으면 git은 상태로 종료됩니다.1
. 배포 스크립트는 이를 실패한 것으로 간주하고 종료합니다. 나는 감지하고 싶다실제실패로 인해 패브릭에 담요를 무시할 수는 없습니다.git commit
실패. 배포를 계속할 수 있지만 실제 커밋이 실패할 때 발생하는 오류를 계속 잡을 수 있도록 빈 커밋 실패를 무시하도록 하려면 어떻게 해야 합니까?
def commit():
local("git add -p && git commit")
<답변1>
git diff의 종료 코드를 확인하여 이 조건을 미리 파악하시겠습니까?
예를 들어(쉘에서):
git add -A
git diff-index --quiet HEAD || git commit -m 'bla'
편집: Holger의 의견에 따라 git diff
명령을 수정했습니다.
<답변2>
로부터git commit
매뉴얼 페이지:
--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>
그냥 연장Tobi & Holger의 명시적인 답변if
성명.
git add -A
if ! git diff-index --quiet HEAD; then
git commit -m "Message here"
git push origin main
fi
약간의 설명을 해보자.
git add -A
: 변경 사항 준비(다음 단계에 필요)git diff-index --quiet HEAD
는 단계적 변경 사항 을 HEAD와 비교합니다.--quiet
은 "차이가 있는 경우 프로그램을 코드 1로 종료하고 0은 차이가 없음을 의미하는"--exit-code
를 의미하므로 중요합니다.
보다--quiet.
<답변4>
with settings(warn_only=True):
run('git commit ...')
이로 인해 패브릭이 실패를 무시합니다. 빈 커밋을 생성하지 않는다는 장점이 있습니다.
추가 레이어로 감쌀 수 있습니다.with hide('warnings'):
출력을 완전히 억제하지 않으면 패브릭 출력에 커밋이 실패했다는 메모가 표시됩니다(그러나 fabfile은 계속 실행됨).
<답변5>
쉘을 통과할 때 다음을 사용할 수 있습니다.... || true
예상하고 무시할 실패를 선언하는 기술:
git commit -a -m "beautiful commit" || true
이것은 또한 사용할 때 쉘 스크립트가 종료되는 것을 방지합니다.errexit
옵션.
대신에... || true
다음과 같이 반환 코드 0으로 종료되는 다른 명령을 사용할 수도 있습니다.
git commit -a -m "beautiful commit" || echo "ignore commit failure, proceed"
<답변6>
아기를 잡아보세요!
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))
'개발 > Python' 카테고리의 다른 글
[파이썬 PyQt] 선택적 신호 인수 (3) | 2022.11.28 |
---|---|
[파이썬] scikit-learn에서 계층화된 학습/테스트 분할 (0) | 2022.10.24 |
[파이썬] 고유한 파일 이름을 만드는 방법은? (0) | 2022.10.24 |
[파이썬] subprocess.Popen과 os.system의 차이점 (0) | 2022.10.23 |