2017-04-11 3 views
0

전 자식의 사전 커밋 후크를 사용하여 몇 가지 규칙을 적용하려고합니다. git diff --name-only을 사용하여 변경되지 않은 파일이 있는지 확인하고, 존재하는 경우 커밋 프로세스를 실패합니다. 하지만, 내 pre-commit 파일 :사전 커밋 후크의 힘내 명령이 올바른 출력을 반환하지 않습니다.

#!/bin/bash 
cd "$(git rev-parse --show-toplevel)" 
pwd 
test=$(git diff --name-only) 
echo "Untracked files: $test" 
exit 0 

git diff --name-only는 빈 문자열을 반환합니다. 쉘에서이 명령을 실행하면 unstaged 파일이 변경된 것을 볼 수 있습니다. sudo을 사용하도록 명령을 변경하면 문제가 올바르게 사용자 권한으로 간주됩니다. 그러나 chmod u+x 또는 chmod 777pre-commit 파일을 보내는 것은 결과에 영향을 미치지 않는 것으로 보입니다.

또한 명령을 테스트하기 위해 git repo 루트 내부에 유사한 bash 파일을 생성했으며 예상대로 작동합니다.

+0

문제점을 재현 할 수 없습니다. 그래도'git diff --name-only'는 인덱스를 작업 트리와 비교하여 수정되지 않은 unstaged 파일을 찾습니다 (텍스트는 원하는 것입니다). 지금까지 그렇게 좋았지 만 다음과 같이한다 :'echo "Untracked ..."unstaged *가 아닌 * untracked *라는 단어가있다. – torek

+0

@torek 좋은 캐치, unstaged라고한다. – Bloodyaugust

답변

0

git diff --staged을 사용하여 준비 파일을 표시해야한다고 생각합니다.

그리고 git commit이 사전 커밋 스크립트 실행을 트리거했는지 확인하십시오. git commit 일 때 첫번째 줄을 확인하는 것은 저장소 디렉토리입니다.

본인의 스크립트를 테스트 한 결과 아무 문제가 없습니다. 그래서 pre-commit.sample에서 pre-commit으로 이름을 바꿀 수 있습니다.

관련 문제