특정 파일 형식을 제외하고 특정 폴더 아래의 모든 파일을 재귀 적으로 무시합니다.


89

비슷한 질문 ( 1 , 23 )을 보았지만 적절한 해결책을 얻지 못했습니다.

특정 파일 형식을 제외하고 특정 폴더 아래의 모든 파일을 무시해야합니다. 폴더는 루트 경로의 하위 디렉토리입니다. 폴더 이름을 지정하겠습니다 Resources. 나는 일을 복잡하게하고 싶지 않기 때문에, 이름이 Resources있는 모든 폴더 아래의 파일을 무시하겠습니다 .

이것은 모든 중복 질문에서 가장 일반적인 솔루션입니다.

# Ignore everything
*

# Don't ignore directories, so we can recurse into them
!*/

# Don't ignore .gitignore
!.gitignore

# Now exclude our type
!*.foo

이 솔루션의 문제점은 새로 추가 된 파일의 추적을 중지 한다는 것입니다 ( *모든 파일을 무시 하므로 ). 모든 파일 형식을 계속 제외하고 싶지는 않습니다. 새 파일이 추가되면 git status표시 되는 정상적인 동작을 원합니다 .

마침내 여기 에 해결책이 생겼습니다 . 해결책은 폴더 에 다른 .gitignore파일 을 추가하는 것 Resources입니다. 이것은 올바르게 작동합니다.

하나의 무시 파일로 동일한 결과를 얻을 수 있습니까? 나는 다른 디렉토리에 많은 무시 파일이 약간 어색하다는 것을 알았습니다.

이것이 내가 달성하려는 것입니다.

# Ignore everything under Resources folder, not elsewhere
Resources

# Don't ignore directories, so we can recurse into them
!*Resources/

# Now exclude our type
!*.foo

그러나 이것은 반대 출력을 제공합니다. *.foo유형을 무시 하고 다른 파일을 추적합니다.

답변:


108

@SimonBuchan이 맞습니다.

git 1.8.2부터 Resources/** !Resources/**/*.foo작동합니다.


1
이것은 나를 위해 작동합니다. 약간의 조정은 디렉토리와 그 아래의 모든 것을 제거해야하므로 DirectoryName1/** DirectoryName1/**/*각각에 대해 수행했습니다. Firs는 디렉토리를 제거하지만 모든 파일 유형을 제거하려면 두 번째가 필요합니다.
Scala Enthusiast

27

가장 좋은 대답은 Resources 아래에 Resources / .gitignore 파일을 추가하는 것입니다.

# Ignore any file in this directory except for this file and *.foo files
*
!/.gitignore
!*.foo

해당 .gitignore 파일을 추가하지 않거나 추가 할 수없는 경우 잘못된 해결책이 있습니다.

# Ignore any file but *.foo under Resources. Update this if we add deeper directories
Resources/*
!Resources/*/
!Resources/*.foo
Resources/*/*
!Resources/*/*/
!Resources/*/*.foo
Resources/*/*/*
!Resources/*/*/*/
!Resources/*/*/*.foo
Resources/*/*/*/*
!Resources/*/*/*/*/
!Resources/*/*/*/*.foo

지정된 것보다 더 깊게 디렉토리를 추가하는 경우 해당 패턴을 편집해야합니다.


2
그게 슬픈 .. 내가 처음 :( 고수 있도록 사실 나는 깊은 디렉토리를해야합니다
nawfal

동일한 솔루션에 대한 자세한 내용은 여기를 참조하십시오. stackoverflow.com/questions/7803689/…-OP @nawfal에 의해 또한 링크 됨
여기

7

이것은 어리석은 것처럼 보일 수 있지만 이전에 색인에 무시하려는 폴더 / 파일을 아직 추가하지 않았는지 확인하십시오. 그렇게했다면 .gitignore 파일에 무엇을 넣든 상관없이 폴더 / 파일은 여전히 ​​준비됩니다.


5
누군가이 특정 유스 케이스 git rm --cached <path to files>에 부딪히면 무시 된 파일을 git에서 지우고 파일 시스템에 남겨 둘 수 있습니다.
slothluvchunk

5

내가 잘못하고 있거나 허용 된 답변이 현재 git에서 더 이상 작동하지 않습니다.

나는 실제로 적절한 해결책을 찾았고 여기 에 거의 같은 질문에 게시했습니다 . 자세한 내용은 거기로 가십시오.

해결책:

# Ignore everything inside Resources/ directory
/Resources/**
# Except for subdirectories(won't be committed anyway if there is no committed file inside)
!/Resources/**/
# And except for *.foo files
!*.foo

2
예, 이것은 저에게 효과적입니다. 을 추가하는 !/Resources/**/것은 자식이 하위 디렉토리를 무시하지 않도록하는 데 중요했습니다.
Johnster
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.