Git에서 무시 된 디렉터리의 하위 디렉터리 무시 해 보겠습니다. 그래서 설정이 있습니다. /uploads/ /uploads/rubbish/ /uploads/rubbish/stuff/KEEP_ME/ /uploads/foo/ /uploads/foo/bar/lose/ 그리고 KEEP_ME디렉토리를

디렉토리를 무시했지만 그 안의 특정 하위 디렉토리를 무시하고 싶다고 가정 해 보겠습니다. 그래서 설정이 있습니다.

/uploads/
/uploads/rubbish/
/uploads/rubbish/stuff/KEEP_ME/
/uploads/foo/
/uploads/foo/bar/lose/

그리고 KEEP_ME디렉토리를 제외한 모든 것을 무시하고 싶습니다 . 무시가 다음과 같이 보이기를 바랍니다.

/uploads/*
!/uploads/rubbish/stuff/KEEP_ME/

그러나 그것은 작동하지 않으며 동일한 주제에 대한 여러 순열도 마찬가지입니다.

작동하는 하나는

/uploads/**/**/**/
!/uploads/rubbish/stuff/KEEP_ME/

하지만 조금 제한적이고 장황하다고 느껴지나요?



답변

gitignore 문서의 패턴 형식 섹션에 따르면 :

선택적 접두사 “!” 패턴을 부정합니다. 이전 패턴에서 제외 된 일치 파일은 다시 포함됩니다. 해당 파일의 상위 디렉토리가 제외 된 경우 파일을 다시 포함 할 수 없습니다. Git은 성능상의 이유로 제외 된 디렉토리를 나열하지 않으므로 포함 된 파일의 패턴은 정의 된 위치에 관계없이 영향을주지 않습니다. 첫 번째 “!”앞에 백 슬래시 ( “\”)를 넣으십시오. 리터럴 “!”로 시작하는 패턴 (예 : “! important! .txt”)

따라서 이전에 제외 된 상위 디렉터리 /uploads/rubbish/stuff/keep/패턴은 콘텐츠를 부정하기 전에 배타적으로 부정되어야합니다.

#ignore everything within /uploads/
/uploads/*

#include everything within /uploads/rubbish/stuff/keep
!/uploads/rubbish/stuff/keep/
!/uploads/rubbish/stuff/keep/*

내부 /uploads/rubbish/stuff/keep/에 하위 디렉터리를 포함하려면 세 번째 줄을 추가합니다.

!/uploads/rubbish/stuff/keep/**/*

답변

에 무언가를 추가하더라도 git이 색인에 추가 하도록 강제.gitignore 할 수 있습니다.

git add --force uploads/rubbish/stuff/KEEP_ME/

그러나 “KEEP_ME”는 디렉토리 인 것처럼 보이며 git은 일반적으로 빈 폴더를 좋아하지 않으므로 폴더가 비어있는 경우 대신 “placeholder”-holder 파일을 추가해야합니다.

git add --force uploads/rubbish/stuff/KEEP_ME/.keep_me

답변

일반 제외가있는 모든 폴더를 제외 할 때 특정 폴더를 포함하는 방법을 찾으려고했습니다.

**/build

/*일반 제외 끝에 를 추가하면 모든 빌드 파일을 계속 제외합니다.**/build/*

그런 다음 포함하려는 경로를 수정하기 위해 다른 줄을 추가합니다.

!**/folder/build/*

우리에게 읽는 gitignore를 남겨주세요

**/build/*
!**/folder/build/*

답변

Buo-Ren LinJohn 의 답변은 매우 도움이되었지만 둘 다 결합해야했습니다.

업로드 내 파일뿐만 아니라 다른 하위 폴더 를 제외하려면 폴더를 제외하고 하위 폴더를 포함하면서 지정된 폴더 앞에 임의의 디렉토리를 명시 적으로 지정해야 합니다.

**/uploads/*
!**/uploads/rubbish/
!**/uploads/rubbish/*

또한 폴더와 하위 폴더 내의 항목을 모두 표시하려면 하위 폴더와 그 내용을 모두 명시 적으로 다시 포함해야합니다.


답변

가장 많이 찬성 된 답변으로 제시된 솔루션은 정확하지 않으며 쉽게 입증 할 수 있습니다.

업로드에있는 모든 것을 무시하는 것으로 시작 / * :

mkdir -p uploads/rubbish/stuff/KEEP_ME
touch uploads/a uploads/rubbish/a uploads/rubbish/stuff/a uploads/rubbish/stuff/KEEP_ME/a
echo '/uploads/*' >> .gitignore
git init
git add .
git commit -m "Initial commit"

이제 위와 같이 무시 된 항목의 상위 디렉토리를 무시합니다.

echo 'uploads/rubbish/stuff/KEEP_ME/' >> .gitignore
echo 'uploads/rubbish/stuff/KEEP_ME/*' >> .gitignore
git status -u

추적되지 않은 파일을 표시하지 않습니다.

작동 시키려면 uploads/트리 아래의 모든 파일 ( uploads/**/*, 최상위 수준뿐만 아니라) 을 무시한 uploads/*다음 유지하려는 트리의 모든 상위 디렉토리를 추가해야합니다.

echo '/uploads/**/*' > .gitignore
echo '!/uploads/rubbish/' >> .gitignore
echo '!/uploads/rubbish/stuff' >> .gitignore
echo '!/uploads/rubbish/stuff/KEEP_ME' >> .gitignore
echo '!/uploads/rubbish/stuff/KEEP_ME/*' >> .gitignore
git status -u

다음을 제공합니다.

On branch master
...
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        uploads/rubbish/stuff/KEEP_ME/a

우리가 사용했다면 uploads/*.gitignore위의 잘, 그래서 예를 들어로서, 모든 중간 파일이 포함되었을 것이다 uploads/rubbish/a위의 상태 명령에 표시됩니다.