나는 .gitignore
구문을 더 명확하게 이해하려고 노력하고 있으며, 특히 https://github.com/github/gitignore gitignores에 관한 한.
선행 슬래시가 .gitignore
파일 위치 ( http://git-scm.com/docs/gitignore에서 ) 와 관련된 경로 이름 만 일치시키는 데 사용되는 것을 확인했습니다 .
선행 슬래시는 경로 이름의 시작과 일치합니다. 예를 들어 "/*.c"는 "cat-file.c"와 일치하지만 "mozilla-sha1 / sha1.c"와는 일치하지 않습니다.
하지만 선행 슬래시를 제거하면 어떻게됩니까? 내가 이해 한 한 두 가지 경우가 있습니다.
- 패턴에 슬래시가 포함되지 않은 경우 (또는 후행 슬래시 만 포함되어 디렉토리와 일치해야 함) 검색은 전체 디렉토리 트리 내에서 수행됩니다. 예를 들어, 패턴이
dir/
일치합니다<root>/dir
,<root>/a/dir
,<root>/a/b/c/.../dir
, 등, 어디<root>
의 위치입니다.gitignore
파일. - 패턴에 후행 위치가 아닌 (마지막 문자가 아님) 슬래시가 포함 된 경우
.gitignore
파일 위치에 상대적인 경로 이름과 만 일치합니다 .
다음은이 동작을 확인하기 위해 만든 예제입니다.
# Directory structure:
<root>
├─ dir/
│ └─ test
├─ src/
│ ├─ dir/
│ │ └─ test
test file is there only because Git does not track empty directories.
첫 번째 테스트 :
# .gitignore
dir/
# git status
nothing to commit
따라서 Git은 두 dir
디렉토리를 모두 무시합니다 . 이것은 사례 번호 1과 일치합니다. 패턴에 슬래시가 없으므로 (후행을 제외하고) Git은 전체 디렉토리 트리를 감시하고 패턴과 일치하는 모든 것을 무시합니다.
두 번째 테스트 :
# .gitignore
/dir/
# git status
Untracked files:
src/
여기서 Git은 dir
패턴의 선행 슬래시 덕분에 루트 디렉토리 바로 아래 의 디렉토리 만 무시합니다 .
세 번째 테스트 :
# .gitignore
dir/*
# git status
Untracked files:
src/
이는 케이스 번호 2와 일치합니다. 패턴 내부에 슬래시가 있으므로 루트 디렉토리에서 시작하는 경로 이름으로 간주됩니다.
이제 진짜 질문을 할 시간입니다. 이 gitignore 파일을 생각해 봅시다 . downloader/
예를 들어 디렉토리를 무시할 때 downloader
전체 디렉토리 트리에서 발견 된 모든 단일 디렉토리 를 실제로 무시하지 않습니까? 이것이 내가 전에 Git의 작동에 대해 본 이후로 생각하게 된 것입니다.
그렇다면 downloader
내부에 디렉토리 가있는 사용자 정의 모듈이있는 경우 Magento 루트의 일반 모듈과 마찬가지로 예기치 않게 무시됩니까? 이것은 실제로 이미 나에게 발생하여 버그를 찾기가 정말 어렵 기 때문에 약간의 정당한 질문입니다.
그래서, 마 젠토에 .gitignore
제대로 루트에서 시작하는 경로 이름에 대해 일치되도록 패턴의 많은, 슬래시를 포함하지만, 몇 가지 경우가, 같은가 (내가 BTW, 예로서 만 말하는 겁니다) 파일 downloader/
또는 errors/
것을 , 내가 착각하지 않았다면 잠재적으로 위험하며 아마도 /downloader/
및 으로 변경해야합니다 /errors/
.
보다 일반적인 질문으로, 루트에서 명시 적으로 시작하는 경로 이름을 선택하고 슬래시를 포함하는 패턴에는 사용하지 않으려는 경우 항상 슬래시를 포함하지 않는 패턴 (후행 제외)에 선행 슬래시를 사용해야합니까? 명확성을 위해 항상 선행 슬래시를 사용합니까? 당신이 그것에 대해 어떻게 생각하십니까?
읽어 주셔서 감사하고 긴 게시물에 대해 죄송합니다.