/ 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
플래그를 참조하십시오 .
'programing' 카테고리의 다른 글
ggplot2의 막대 그림에서 막대 사이의 공간을 늘리는 방법은 무엇입니까? (0) | 2021.01.14 |
---|---|
Rails 및 Devise의 강력한 매개 변수 (0) | 2021.01.14 |
데이터 세트를 가져올 때 문제 :`Error in scan (…) : line 1 did not have 145 elements` (0) | 2021.01.14 |
Xcode 5 앱 제출 문제 (0) | 2021.01.14 |
손상된 HDFS 파일을 수정하는 방법 (0) | 2021.01.14 |