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
java. - 패턴에 후행 위치에 있지 않은 슬래시가 포함된 경우(마지막 문자가 아님), 패턴은 다음과 관련된 경로 이름과만 일치합니다.
.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
그 안에 있는 디렉터리, 마젠토의 루트에 있는 일반 디렉터리뿐만 아니라 예상치 않게 무시될까요?이것은 일종의 반어법적인 질문입니다. 왜냐하면 그것은 이미 저에게 일어났기 때문입니다. 정말 찾기 어려운 벌레를 만들어내고 있기 때문입니다.
그래서, 마젠토에서..gitignore
파일(예시로만 참조하고 있습니다, btw) 많은 패턴에 슬래시가 포함되어 있기 때문에 루트에서 시작하는 경로 이름과 정확하게 일치하지만, 다음과 같은 몇 가지 경우가 있습니다.downloader/
또는errors/
만약 내가 틀리지 않았다면, 잠재적으로 위험하고, 아마도 그것은 변경되어야 할 것입니다./downloader/
그리고./errors/
.
보다 일반적인 질문으로 루트에서 명시적으로 시작하는 경로 이름을 선택하고 슬래시를 포함하는 패턴에 사용하지 않으려면 슬래시를 포함하지 않는 패턴에 대해 항상 선행 슬래시를 사용해야 합니까? 아니면 명확성을 위해 항상 선행 슬래시를 사용해야 합니까?당신은 그것에 대해 어떻게 생각합니까?
읽어주셔서 감사하고 글이 길어져서 죄송합니다.
나중에 참조할 수 있도록 요약하고 싶습니다. 선행 슬래시는 루트에 일치하는 항목을 고정합니다.따라서 아래 예제에서 슬래시가 없으면 와일드카드는 foo 내의 모든 것을 제외합니다. 왜냐하면 다음과 같은 이유로*
나무 아래로 재귀적으로 이동합니다., 만지와 함께, 께함과 함께/*
폴더 foo와 폴더의 내용을 제외한 모든 항목을 제외합니다.
$ cat .gitignore
/*
!/foo
당신은 당신 자신의 질문에 전적으로 대답했습니다.github/gitignore 보고서를 좀 더 자세히 살펴보면 대부분의 파일이 패턴이 기록되는 방식에 대해 일관성 없는 규칙을 사용한다는 것을 알 수 있습니다. 대부분의 경우 사용자처럼 설명서를 읽거나 테스트하지 않은 사용자가 제출했을 가능성이 높습니다.
그래서 그게 도움이 된다면,맞아요, 자신감을 가지세요.
이러한 협업 프로젝트에서 실수가 발견되면 주저하지 말고 지식을 제공하십시오.자신감을 더 쌓아야 할 경우에도 몇 가지 선례가 있습니다.
언급URL : https://stackoverflow.com/questions/24139478/when-to-use-leading-slash-in-gitignore
'programing' 카테고리의 다른 글
mysql에서 mariadb로 mysqdump - 데이터베이스 크기 차이 (0) | 2023.09.02 |
---|---|
Linkq-to-SQL 시간 초과 (0) | 2023.09.02 |
열 머리글을 사용하여 SQL Server에서 Excel로 내보내시겠습니까? (0) | 2023.09.02 |
항목이 없으면 만들고, 없으면 업데이트하시겠습니까? (0) | 2023.09.02 |
MySQL 하위 문자열 빈 값 반환 (0) | 2023.09.02 |