gitignore에서 선행 슬래시를 사용하는 경우
나는 .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/
.
보다 일반적인 질문으로, 루트에서 명시 적으로 시작하는 경로 이름을 선택하고 슬래시를 포함하는 패턴에는 사용하지 않으려는 경우 항상 슬래시를 포함하지 않는 패턴 (후행 제외)에 선행 슬래시를 사용해야합니까? 명확성을 위해 항상 선행 슬래시를 사용합니까? 당신이 그것에 대해 어떻게 생각하십니까?
읽어 주셔서 감사하고 긴 게시물에 대해 죄송합니다.
가능한 빠른 미래 참조를 위해 요약하고 싶었습니다. 선행 슬래시는 일치 항목을 루트에 고정합니다. 따라서 아래의 예에서 슬래시가 없으면 와일드 카드는 *
트리 아래로 재귀 적으로 이동 하기 때문에 foo 내의 모든 항목도 제외 합니다. 그러나에서는 /*
foo 폴더와 그 내용을 제외한 모든 항목을 제외합니다.
$ cat .gitignore
/*
!/foo
You've answered your own question entirely. If you look at the github/gitignore repo more closely, you'll see most files use inconsistent rules about how patterns are written; it's very likely most were contributed by people who didn't bother to read the documentation nor test things out as you did.
So if that helps: You're right, be confident.
If you see mistakes in collaborative projects such as this, don't hesitate to contribute your knowledge. There's even some precedent if you need to build up your confidence further.
참고URL : https://stackoverflow.com/questions/24139478/when-to-use-leading-slash-in-gitignore
'programing tip' 카테고리의 다른 글
JointsWP4 (SASS) : 고정 속성 변경 (0) | 2020.08.21 |
---|---|
Excel 사용자 지정 함수 도구 설명에 대한 탐구 (0) | 2020.08.21 |
지속적인 통합을 수행 할 때 최고의 분기 전략? (0) | 2020.08.21 |
통합 된 Markdown WYSIWYG 텍스트 편집기 (0) | 2020.08.21 |
단일 페이지 JavaScript 웹 애플리케이션의 아키텍처? (0) | 2020.08.21 |