2017-11-16 12 views
1

나는 체리 선택 명령 다음에 실행하는 bash는 스크립트가 :bash 스크립트에서 빈 체리 픽을 확인하는 방법은 무엇입니까?

if git cherry-pick -x "$commitId"; then 
     ammed_commit "$BRANCH" 
    else 
     #here I want to check if this resulted in empty commit 
fi 

내가 다시 명령을 실행하고 문자열을 비교 한 후 문자열 출력을 받고 있지만, 출력은 내가 콘솔에서 볼 것이 아니다 시도 . 나는 다음과 같은 스크립트를 테스트입니다 :

The previous cherry-pick is now empty, possibly due to conflict resolution. 
If you wish to commit it anyway, use: 

git commit --allow-empty 

Otherwise, please use 'git reset' 
//READ_STATUS gets this value and not the one above this line??? 
On branch test-stage Your branch is ahead of 'upstream/test-stage' by 1 commit. (use "git push" to publish your local commits) You are currently cherry-picking commit 001e6beda. nothing to commit, working tree clean 
no 

그래서 내가 가지고 두 가지 질문 : 나는이 스크립트를 실행하면 다음

#!/bin/bash 

READ_STATUS=$(git cherry-pick -x 001e6beda) 
SUB_STRING="The previous cherry-pick is now empty" 

echo $READ_STATUS 

stringContain() { [ -z "${2##*$1*}" ]; } 

if stringContain "$READ_STATUS" 'The previous cherry-pick is now empty';then 
    echo yes 
else 
    echo no 
fi 

exit 

내가받은 출력

  1. 왜 내 문자열을 완전한 출력을 얻지 못하고 있습니까?
  2. 이 문제를 해결하고 cherry-pick이 빈 커밋으로 끝나는 지 어떻게 확인할 수 있습니까?

답변

1

git은 오류 메시지를 stdout이 아닌 stderr로 보냅니다. READ_STATUS=$(git cherry-pick -x 001e6beda)은 stdout을 캡처하고 자식 실패시 READ_STATUS를 아무 것도 설정하지 않습니다.

당신은 당신의 코드를이 방법을 다시 작성할 수 있습니다 : 또한

read_status=$(git cherry-pick -x 001e6beda 2>&1) 
empty_message="The previous cherry-pick is now empty" 
if [[ $read_status = *"$empty_message"* ]]; then 
    echo yes 
else 
    echo no 
fi 

참조 :

+1

감사합니다. 완벽하게 작동합니다! –