2012-06-22 3 views
2

Git 사전 커밋 훅 클라이언트 스크립트를 작성 중이며 커밋 된 파일을 필터링하고 삭제 된 스크립트로 무언가를하고 싶습니다.사전 커밋 훅 쉘 스크립트에서 git 상태 확인

다음과 같이 커밋에 포함 된 모든 파일을 다음과 같이 반복 할 수 있음을 알았습니다.

#!/bin/sh 

for file in $(exec git diff-index --cached --name-only HEAD) 
    do 
    echo $file 
done 

내가 파일이 삭제 될 때이 D로 첫 번째 문자를 표시하기 때문에 내가 git status --porcelain <file>를 사용할 수 있다고 생각 삭제 된 파일을 찾을 수 있습니다.

그래서 내가 필요한 것은 git status --porcelain <file>의 출력에서 ​​첫 번째 문자가 D인지 확인하는 구문을 만드는 데 도움이됩니다.

#!/bin/sh 

for file in $(exec git diff-index --cached --name-only HEAD) 
    do 
    # This line doesn't work but it's the best I've came up with. 
    if git status --porcelain $lessFile == *"D"*; then 
     echo "$file was deleted" 
    fi 
done 

여기에 근거가 없다면 알려주세요. 감사.

답변

3

$(exec git status --porcelain | egrep "^D" | sed -e 's/^D //') 

이 공간에 파일 이름에 문제가있을 수 있습니다보십시오. 또는 그 이상

git diff-index --cached --name-status HEAD | awk '$1 == "D" { print $2 }' | while read file 
do 
    echo $file 
done 

this question도 참조하십시오.

+0

답변 해 주셔서 감사합니다. 샘플에 전체 문맥을 포함 시키십시오. 쉘 스크립팅에 관해서 많은 것을 알지 못한다면 나는 조각들을 모으는데 어려움을 겪고있다. –

+0

그냥 두 번째를 사용하십시오. 그것은 완전하고 완전하다. –

+0

굉장하다, 내가 처음 시도했을 때 그것을 잘못 복사했다. 당신의 도움을 주셔서 감사합니다. –

관련 문제