developer tip

Git 무시 디렉토리와 directory / *의 차이점은 무엇입니까?

optionbox 2020. 8. 5. 08:10
반응형

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.

참고URL : https://stackoverflow.com/questions/25715898/whats-the-difference-between-git-ignoring-directory-and-directory

반응형