regex - 파일 - useful gitignore



gitignore 패턴 일치 설명 (1)

첫째, .gitignore 파일의 첫 번째 줄은 질문에서 까다로운 부분입니다.

*  // Says exclude each and every file in the repository,
   // unless I specify with ! pattern explicitly to consider it

먼저 .gitignore 의 첫 번째 버전을 고려할 것입니다.

  1. * 저장소의 모든 파일을 제외시킵니다.
  2. !*.html 모든 HTML 파일 허용.
  3. !images/*.* images 폴더에있는 모든 유형의 파일을 고려하십시오.

모든 JPG / JPEG를 포함 시키려면 !*.jp*g 를 3 번째 줄에 추가하면됩니다 !*.jp*g 그러면 git은 해당 파일이있는 폴더와 상관없이 모든 jpg 및 jpeg를 고려하게됩니다. 하지만 당신은 구체적으로 이미지 폴더 에서뿐만 아니라 JPG, 이미지 폴더에있는 파일의 모든 유형을 원했습니다. 여기에 관련된 문서를 읽고 3 부에서 해결책 부분을 살펴 보겠습니다.

힘내는 폴더 고려 사항에 관한 패턴 무시 :

  1. 슬래시로 끝나는 패턴 : 패턴이 <dir-name>/ 끝나면 git은 해당 디렉토리와 다른 모든 하위 디렉토리에있는 파일을 무시합니다. 문서에서 주어진 예제처럼

    foo/ 는 디렉토리 foo와 그 아래의 경로와 일치하지만 일반 파일이나 심볼릭 링크 foo와는 일치하지 않습니다

    그러나 어떤 패턴이 제외 된 디렉토리의 파일과 일치하면 git은 고려하지 않습니다.

  2. 패턴에는 슬래시가 없습니다 . 무시 목록에서 슬래시로 끝나지 않는 디렉토리 이름을 지정하면 git은 해당 패턴을 경로 이름이있는 파일과 일치시킬 수있는 패턴으로 간주합니다.

    패턴에 슬래시 /가 포함되어 있지 않으면 Git은이를 쉘 glob 패턴 으로 처리하고 위치와 관련된 경로 이름과 일치하는지 확인합니다

  3. 슬래시 및 특수 문자 (* /?) 가있는 패턴 : 패턴이 첫 번째 예제와 같이 끝나면 images/*.* 문서에 지정된대로 작동합니다

    예 : "Documentation / *. html"은 "Documentation / git.html"과 일치하지만 "Documentation / ppc / ppc.html"또는 "tools / perf / Documentation / perf.html"과 일치하지 않습니다.

해결책

세 번째 점을 고려할 때 !images/*.* 패턴의 images 디렉토리에있는 모든 파일을 고려해야합니다. 그러나 문서가 한 가지 더 중요한 점을 말하고 있기 때문에 그렇게하지 않습니다.

힘내는 제외 된 디렉토리를 나열하지 않는다.

첫 번째 행 때문에 "images"디렉토리 자체는 무시됩니다. 먼저 우리는 git에게 이미지 디렉토리와 나중에 다른 라인을 명시 적으로 추가 라인을 고려하여 (필요한 경우) 고려해야한다고 말해야합니다.

*
!*.html
!images/                 // <- consider images folder
!images/*.*

참고 : 마지막 줄에서는 하위 디렉토리가 아닌 이미지 디렉토리에서만 모든 유형의 파일을 고려합니다. (2 절의 3 번째 점)

다음 디렉토리 트리가 있습니다.

> #pwd is the repo   
> tree -a
.
├── .git
   |.....
├── .gitignore
├── README.md
├── f1.html
├── f2.html ... and some more html
├── images
   └── river.jpg
>

나는 또한 .gitignore 에서 다음과 같은 것을 가지고있다 :

> cat .gitignore
*
!*.html
!images/*.*
>

images 디렉토리의 모든 파일을 repo에 포함시키고 싶습니다. 그러나 그것은 일어나지 않습니다. gitignore에서 다음을 사용하여 작동하도록했습니다.

*
!*.html
!images*
!*.jp*g

여기서 무슨 일이 일어나고있는거야? gitignore를 테스트 할 수있는 확실한 방법이 있습니까? 나는 documentation 확인했다. 여기 이해가되지 않는 요점이 있습니다 (이것은 패턴 형식 제목 아래에 있습니다).

그렇지 않으면, Git은 패턴을 FNM_PATHNAME 플래그와 함께 fnmatch (3)가 소비하기에 적합한 쉘 glob로 취급합니다. 패턴의 와일드 카드는 경로 이름의 /와 일치하지 않습니다. 예를 들어 "Documentation / *. html"은 "Documentation / git.html"과 일치하지만 "Documentation / ppc / ppc.html"또는 "tools / perf / Documentation / perf.html"과 일치하지는 않습니다.





gitignore