.gitignore에서 부정 패턴은 어떻게 작동합니까? — file.txt

부정 된 패턴 (!로 시작하는 줄)이있는 .gitignore 파일을 사용하려고했지만 예상대로 작동하지 않습니다.

최소한의 예로서 다음과 같은 디렉토리 구조가 있습니다.

C:/gittest
 -- .gitignore
 -- aaa/
   -- bbb/
     -- file.txt
   -- ccc/
     -- otherfile.txt

내 gitignore 파일에 다음이 있습니다.

aaa/
!aaa/ccc/

이 문서 페이지를 기반으로 한 내 이해 는 aaa / ccc / otherfile.txt 파일을 무시해서는 안되지만 실제로 git은 aaa 아래의 모든 것을 무시하고 있습니다.

이 문장을 오해하고 있습니까? “패턴을 무효화하는 선택적 접두사!; 이전 패턴에서 제외 된 일치하는 파일은 다시 포함됩니다.”?

BTW, 이것은 msysgit 1.7.0.2를 사용하는 Windows에 있습니다.



답변

실제로하고 싶은 것은 다음과 같습니다.

aaa/*
!aaa/ccc

당신은 그것을 “쳐다 보지 말라”라고 말하고 있기 aaa때문에 그것은 경로를 조사조차하지 않는다 aaa/ccc. 와일드 카드를 사용하는 경우 여전히의 내용을 읽은 aaa다음 각 항목이 와일드 카드와 일치하고 무시 aaa/ccc됩니다.


답변

의 모든 항목을 제외 하고 그 아래의 모든 항목을 aaa포함 aaa/ccc하려면 다음을 사용해야합니다.

aaa/*
!aaa/ccc
!aaa/ccc/*

첫 번째 줄은 git에게 아래의 모든 내용을 무시하도록 지시하고 두 번째 줄은 실제로 세 번째 줄을 “활성화”하는 aaa폴더 aaa/ccc를 무시하지 않도록 지시 한 다음 아래의 모든 내용을 무시하지 않도록 지시합니다 aaa/ccc.


답변

누군가가 아직 git status실행 중 새로 무시되지 않은 항목을 보지 못한다면 git update-indexgit이 변경 사항을 보는 데 도움이 될 수 있습니다 (적어도 gitbash 버전 1.9.x에서).