2013-10-08 3 views
3

커밋을 확인하기 위해 git pre-commit hook을 사용하고 있습니다. 사전 커밋 스크립트가 기본적으로 한 가지를 수행합니다"git diff-index"에서 파일을 제외하는 방법

exec git diff-index --check --cached HEAD -- 

그것은 너무 다른 일을하지만,이 토론에 관련이 있습니다.

문제는 모든 종류의 파일이 저장소에 있으며 "git diff-index --check"에 의해 시행되는 검사를 준수해야하는 것은 아닙니다.

제 질문은 : 어떻게이 파일을 제외하거나 무시할 수 있습니까? 즉, 나는 git에서 그것을 추적하지만, 나는 그것들을 미리 커밋 체크에서만 무시하고 싶다.

예를 들어 특정 패치는 * .c, * .h, * ini 및 * .xyz 파일을 포함합니다. "git diff-index --check"을 .c 및 .h 파일에만 적용하려고합니다.

+1

설명서 페이지에 " 인수가있는 경우 해당 패턴과 일치하는 경로 만 비교합니다. 그렇지 않으면 모든 추적 된 파일이 비교됩니다." 그래서''* .c ''* .h ''를 추가하면된다. – torek

+0

@torek 사실, 당신의 제안은 작동합니다 :) "path"인수 이름이 약간 잘못된 것 같아요. 사실이 경로와 관련된 파일 이름 패턴에 관한 모든 것이 경로에 관한 것입니다. 답변을 올리십시오. – kliteyn

답변

6

남자 페이지는 말한다 : < 경로 > 인수가 존재하는 경우

, 그 패턴과 일치하는 경우에만 경로를 비교합니다. 그렇지 않으면 모든 추적 된 파일이 비교됩니다.

즉, "path"인수는 특정 경로가 아닌 glob 스타일의 패턴입니다. 명령에 '*.c' '*.h'을 추가하기 만하면됩니다.

+0

내 env (Windows + Git bash) 나 다른 자식 버전에 문제가 있는지는 잘 모르겠지만 다음은 나를 위해 일했습니다. (따옴표 없음) : 'git diff-index --check --cached HEAD - * .html * .js' – harriha

+0

'(exclude)'pathspec가 여기서 작동합니까? –

+1

@Mr_and_Mrs_D : 나는 그렇게 생각한다. 나는 그것을 시험하지 않았다. 모든 pathspec handling *은 Git의 공통 코드를 통해 수행되어야합니다. 그래서 모든 것이 동일하게 동작합니다 (그러나 실제로는 * 그렇게하지 않았습니다 : 특히 gitignore pathspecs는 별도의 코드를 사용합니다). – torek

관련 문제