Git 무시 디렉토리와 directory / *의 차이점은 무엇입니까?
git에서 디렉토리의 내용을 무시하는 올바른 방법이 무엇인지 혼란 스럽습니다.
다음 디렉토리 구조가 있다고 가정하십시오.
my_project
|--www
|--1.txt
|--2.txt
|--.gitignore
이것을 넣는 것의 차이점은 무엇입니까?
www
이?
www/*
내가이 질문을하는 이유는 다음과 같습니다 .git에서 디렉토리가 비어 있으면 git은 빈 디렉토리를 저장소에 포함하지 않습니다. 그래서 디렉토리 아래에 여분의 .gitkeep 파일을 추가하여 비어 있지 않도록 솔루션을 시도했습니다. 그 해결책을 시도했을 때 .gitignore 파일에 있으면 아래와 같이 작성합니다.
www
!*.gitkeep
작동하지 않습니다 (내 의도는 www의 모든 내용을 무시하고 디렉토리를 유지하는 것입니다). 그러나 내가 다음을 시도하면 :
www/*
!*.gitkeep
그런 다음 작동합니다! 따라서 두 가지 방법 사이에 약간의 차이가 있어야한다고 생각합니다.
이 사이에 차이가있어 www
, www/
하고 www/*
.
기본적으로 문서 및 내 테스트에서 www
파일 또는 디렉토리 www/
와 일치하는 디렉토리를 찾고 디렉토리 만 일치하고 www/*
내부의 디렉토리 및 파일은 일치 www
시킵니다.
난 단지 사이의 차이점을 설명하겠습니다 www/
과 www/*
의 차이 때문에, 여기 www
와는 www/
분명하다.
의 경우 www/
git은 디렉토리 www
자체를 무시 하므로 git은 내부를 보지 않습니다. 그러나 www/*
git www
은 내부의 모든 파일 / 폴더를 확인 하고 패턴으로 모든 파일 / 폴더 를 무시합니다 *
. www
자식 파일 / 폴더를 모두 무시하면 git이 빈 폴더를 추적하지 않기 때문에 동일한 결과를 얻는 것처럼 보입니다 . 실제로 결과는 OP의 경우 www/
또는 www/*
독립형 의 경우 아무런 차이가 없습니다 . 그러나 다른 규칙과 결합하면 차이가 있습니다.
예를 들어, www/1.txt
내부의 다른 모든 것만 포함 하고 무시 하려면 어떻게해야 www
합니까?
다음 .gitignore
은 작동하지 않습니다.
www/
!www/1.txt
다음이 .gitignore
작동 하는 동안 왜?
www/*
!www/1.txt
전자의 경우 git은 디렉토리를 무시하고 www
내부를 www/1.txt
다시 포함시키지 않습니다 . 첫 번째 규칙 제외 상위 디렉토리 www
가 아닌 www/1.txt
, 그 결과는 www/1.txt
"수 없습니다 다시 포함 ".
그러나 후자의 경우 git은 먼저 아래의 모든 파일 / 폴더를 무시하고 그중 www
하나를 다시 포함 www/1.txt
합니다.
이 예에서 설명서의 다음 줄이 도움이 될 수 있습니다.
선택적 접두사 "!" 패턴을 무효화합니다. 이전 패턴에서 제외 된 일치하는 파일은 다시 포함됩니다. 해당 파일의 상위 디렉토리가 제외 된 경우 파일을 다시 포함 할 수 없습니다.
나는 단지 문서를 파싱하고 있으며, 더 고급 패턴에서만 다르다는 것을 알 수 있습니다.
$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar
나는 한 위의 테스트를하고 교체하는 경우 !/foo
에 !/foo/*
, 당신은 실제로 다른 결과를 얻을 수 없습니다.
노트
foo
모든 파일을 제외 foo
하지만
foo/
foo라는 디렉토리 만 제외합니다.
이미 얻은 완벽한 답변 외에도 .gitignore
하위 폴더를 포함하여 프로젝트의 어느 곳에 나 있을 수 있습니다 .
그래서 당신은 내부의 모든 파일을 무시하려면 www
,하지만 whant www
폴더 대신 빈을 사용하는 버전이 될 .gitkeep
, .dummy
또는 무엇이든 당신이 선택 이름을 왜 사용하지 .gitignore
모든 파일을 무시하는 말, 거기?
/
|- .gitignore (a)
\- www
|- .gitignore (b)
|- 1.jpg
\- 2.jpg
루트 .gitignore
(a)에서는 www
폴더 나 그 내용에 대해 아무 것도 말하지 않습니다 .
에서 www/.gitignore
(b) 귀하는 다음을 넣어 :
# ignore all files in this folder except this .gitignore
*
!.gitignore
This way everything looks more organized (to me at least).
To ignore everything in a directory except dotfiles you can use the following glob-pattern in your .gitignore
:
www/[^.]*
So no need for an extra .gitignore
, just simply add a .keep
file to your www
directory.
'developer tip' 카테고리의 다른 글
PHP foreach 루프 키 값 (0) | 2020.08.06 |
---|---|
nullable bool로 변환 하시겠습니까? (0) | 2020.08.06 |
병합 된 범위 보고서를 제공하도록 멀티 모듈 Maven + Sonar + JaCoCo를 구성하는 방법은 무엇입니까? (0) | 2020.08.05 |
Dijkstra의 알고리즘이 음의 가중치 모서리에서 작동하지 않는 이유는 무엇입니까? (0) | 2020.08.05 |
서버가 프로토콜 위반을 커밋했습니다. (0) | 2020.08.05 |