programing

/ dir 및 / dir /과 같이 후행 슬래시가 있거나없는 .gitignore 규칙의 차이점

firstcheck 2021. 1. 14. 08:32
반응형

/ dir 및 / dir /과 같이 후행 슬래시가 있거나없는 .gitignore 규칙의 차이점


Git 저장소 내의 .gitignore 파일 /dir사이에 차이점이 /dir/있습니까?

다음은 어떻게 다릅니 까?

/dir
/dir/
/dir/*

참조하십시오 아래 빅터 슈뢰더의 답변을 .


이것은 오래된 질문이지만 Google에서 높은 순위를 차지하고 가장 많이 득표 한 답변이 잘못되었습니다 . 여기에 정답이 있습니다.

예,이 규칙은 다릅니다.

  • /dir 파일, 디렉토리, 링크, 이름이 지정된 모든 항목과 일치합니다. dir
  • /dir/이름이 지정된 디렉토리 일치 합니다 .dir
  • /dir/*모든 파일, 디렉토리 및 이름이 지정된 디렉토리 내의 모든 항목과 일치합니다 dir( dir디렉토리 자체는 아님).

/dir, /dir/및이 /dir/*있습니다 NOT 와 같습니다. !.gitkeep빈 디렉토리 추적의 한계를 극복 하는 유명한 규칙과 같이 재정의 규칙을 사용할 때 차이점이 매우 분명 합니다. 파일의 존재를 가정dir/.gitkeep

  • /dir/dir/(가) 그래서, 힘내 심지어 디렉토리 내에 보이지 않는 것 .gitkeep같다되지 않습니다.
  • 를 사용 /dir/*하면 파일이 Git에 의해 감지되고 이것이 .gitkeep커밋되면 규칙이 디렉터리 자체에는 적용되지 않고 해당 콘텐츠에만 적용되기 때문에 디렉터리가 유지됩니다 .

OBS : 위에서 언급 한 모든 규칙 .gitignore/접두사 때문에 현재 디렉터리 (가있는 위치)에 고정됩니다 . 접두사가 없으면 규칙은 해당 특정 디렉토리뿐만 아니라 하위 디렉토리 또는 저장소의 모든 곳 ( .gitignore루트 수준에있는 경우)에도 적용됩니다.


패턴에는 다른 의미가 있습니다

gitignore (5) 의 패턴 형식 섹션에 따르면 :

  • 패턴이 슬래시로 끝나면 다음 설명을 위해 제거되지만 디렉토리와 일치하는 항목 만 찾습니다. 즉, foo /는 디렉토리 foo 및 그 아래의 경로와 일치하지만 일반 파일 또는 기호 링크 foo와 일치하지 않습니다 (이것은 일반적으로 git에서 pathspec이 작동하는 방식과 일치합니다).

  • 패턴에 슬래시 /가 포함되어 있지 않으면 git은이를 셸 glob 패턴으로 취급하고 .gitignore 파일의 위치에 상대적인 경로 이름과 일치하는지 확인합니다 (.gitignore가 아닌 경우 작업 트리의 최상위 수준에 상대적). 파일).

이것이 의미하는 바는 "dir"은 파일, 디렉토리 또는 심볼릭 링크 일 수 있지만 후행 슬래시가있는 "dir /"는 디렉토리와 만 일치한다는 것입니다. 대부분의 경우 차이는 중요하지 않지만 구분을 이해하면 .gitignore 파일에서 모호성을 제거 할 수 있습니다.


Git 2.23 (2019 년 3 분기)은 gitignore 패턴의 슬래시에 대한 설명을 수정하려고합니다 ( "이 수준에만 고정"및 "디렉토리 만 일치"와 같은 것을 나타내는 데 사용됨).

이제 문서 에는 다음이 포함됩니다.

  • 슬래시 ' /'는 디렉터리 구분 기호로 사용됩니다. 검색 패턴
    의 시작, 중간 또는 끝에 구분자가 나타날 수 있습니다 .gitignore.

  • 패턴의 시작 또는 중간 (또는 둘 다)에 구분 기호가있는 경우 패턴은 특정 .gitignore파일 자체 의 디렉토리 수준에 상대적 입니다.
    그렇지 않으면 패턴은 레벨 아래의 모든 레벨에서도 일치 할 수 있습니다 .gitignore.

  • 패턴 끝에 구분 기호가 있으면 패턴은 디렉토리와 만 일치하고 그렇지 않으면 패턴은 파일과 디렉토리 모두와 일치 할 수 있습니다.

  • 예를 들어, 패턴 doc/frotz/doc/frotz디렉토리 와 일치 하지만 디렉토리 와 일치 하지 않습니다 a/doc/frotz.
    그러나 frotz/일치 frotz하고 a/frotz그것은 디렉토리입니다 (모든 경로는 .gitignore파일 에서 상대적입니다 ).

  • 별표 " *"는 슬래시를 제외한 모든 항목과 일치합니다.
    " ?"문자는 " /"를 제외한 모든 문자와 일치합니다 .
    범위 표기법 (예 :)을 [a-zA-Z]사용하여 범위의 문자 중 하나를 일치시킬 수 있습니다.
    자세한 설명은 fnmatch (3) 및 FNM_PATHNAME플래그를 참조하십시오 .

참조 URL : https://stackoverflow.com/questions/17888695/difference-between-gitignore-rules-with-and-without-trailing-slash-like-dir-an

반응형