하위 디렉토리에서 .gitignore 규칙을 무시할 수 있습니까?


82

루트의 .gitignore 규칙을 제외하고 하위 디렉토리의 모든 .gitignore 규칙을 무시하고 싶습니다.

예) 나는 이미 .gitignore디렉토리 구조에 파일을 가지고 있습니다 /a.

또한이 .gitignore에서 파일을 /a/b. 가정 /aa.txt b.txt파일을.

/a/b.config파일 이 있습니다. .gitignore정의 .config/a/b.

.config파일이 무시됩니다 .gitignore에서 /a/b.

하지만 하위 디렉토리의 .config규칙을 무시 하여 파일 을 추적하고 싶습니다 .gitignore.

가능합니까?

미리 감사드립니다

답변:


134

귀하의 질문은 너무 명확하지 않지만 다른 gitignore 규칙을 원하는 하위 디렉토리가 있으면 해당 디렉토리에 새 .gitignore를 만들 수 있습니다.

당신이 가지고 있다고 :

project / .gitignore
프로젝트 / 물건 /.gitignore

stuff /의 .gitignore는 루트 디렉토리의 .gitignore를 재정의합니다.

git help gitignore또는 man gitignore가능한 것에 대해 훨씬 더 많은 정보를 가지고 있습니다.


2
나는 영업 이익은 당신이 디렉토리 구조를 묻는 생각 /a/b/c하고 업데이트 .gitignore에서 /a/b,에서 수 /a/b/c의 규칙을 무시 /a/b하고 대신 단지에서 규칙을 사용 /a.
Michael Mior

45
예, 그것이 질문이라면 .gitignore에서 규칙을 부정 할 수 있습니다. "An optional prefix ! which negates the pattern; any matching file excluded by a previous pattern will become included again."
signine

3
@signine은 디렉토리에서 작동하지 않습니다. 내 대답을 참조하십시오 .
Ross Patterson

2
나는 그것을 말하는 것이 더 정확하다고 생각합니다 . 단순히 재정의가 아니라 더 높은 우선 순위로 inner .gitignore병합됩니다 outer .gitignore.
Eric Wang

@eric wang 분명히 하위 디렉토리는 병합되지 않지만 재정의합니다. git-scm.com/docs/gitignore
topspin

39

node_modules저장소 에 포함 하고 싶지만 일부 모듈에는 .gitignore자체가 있습니다. 루트 .gitignore파일에 다음을 추가하여 규칙을 무효화 할 수 있습니다 .

# Make sure to include everything in node_modules.
!node_modules/**

3
이 작업을 수행하는 더 일반적인 방법이 있습니까? 내가 가지고 말할 수 node_modules/mod1, node_modules/mod2모두가 깊은 무시한 .gitignore 있습니다 내에서 node_modules그 내부 (에서와 node_modules/mod1/node_modules. 내가 추가 및 제거 모듈은 종종 그래서 나는 매우 잘 알고 수동으로 무시하는 규칙을 추가 할 수 없습니다 node_modules/mod1/.gitignore또는 수동으로 추가 !node_modules/mod1/node_modules모든 시간을. 기본적으로 저는 meteor 앱을 배포하려고하는데 모든 임베디드 .gitignores가 git에서 모든 것을 가져 오는 것을 불가능하게 만듭니다
gman

10

여기서 문제의 핵심은 상위 디렉토리가 제외된다는 것입니다. 에서 $ man gitignore:

해당 파일의 상위 디렉토리가 제외 된 경우 파일을 다시 포함 할 수 없습니다. Git은 성능상의 이유로 제외 된 디렉터리를 나열하지 않으므로 포함 된 파일의 모든 패턴은 정의 된 위치에 관계없이 영향을주지 않습니다.

여기에 내가 작동하게 된 방법이 있습니다. 주어진:

/a/...
/b/foo
/c/...

/.gitignore:

/*
!/b

다음 /b/foo의 모든 상태로 포함 된 파일을 보여줍니다 /a및이 /c제외됩니다. 트레이드 오프는 파일을 포함하려는 디렉토리의 모든 부모에 대해 부정을 추가해야한다는 것입니다.


왜 사용하지 !/b/**/*않습니까?
Alexis Tyler

추가 설명 없이는 응답 할 수 없습니다.
Ross Patterson

6

내가 아는 한 그것을 할 방법이 없습니다. 로컬 .gitignore가 루트 ginignore를 덮어 쓰므로 내 해결 방법은 수동으로 추가하는 것입니다.

git add --force [ your file and folder]

부모 .gitignore가 자식 폴더 설정을 재정의하므로 자식이 나를 위해 작동하지 않았습니다. 강제로 추가 git add -f myfile.txt하면 상위 .gitignore설정을 무시하고 변경 내용을 추적하기 시작 합니다.
SliverNinja-MSFT
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.