텍스트 파일 전용 화이트리스트를 만들었습니다.
*
!*.txt
이제 하위 디렉토리에 추적되지 않은 텍스트 파일 sub/dir/file.txt
이 있습니다 - , 이것은 표시되지 않습니다 (무시 됨). 그러나 루트 디렉토리의 텍스트 파일은 표시됩니다.
그 이유는 무엇이며 어떻게 수정합니까?
텍스트 파일 전용 화이트리스트를 만들었습니다.
*
!*.txt
이제 하위 디렉토리에 추적되지 않은 텍스트 파일 sub/dir/file.txt
이 있습니다 - , 이것은 표시되지 않습니다 (무시 됨). 그러나 루트 디렉토리의 텍스트 파일은 표시됩니다.
그 이유는 무엇이며 어떻게 수정합니까?
.gitignore
.
답변:
그런 식으로 시도하면 구조에서 디렉토리를 블랙리스트에 올리기 때문에 실패합니다.
해결하기 위해, 당신은, 디렉토리가 아닙니다, 당신은 커밋 할 파일 유형 중 하나가 아닌 블랙리스트에 모든 것을 원하는 디렉토리를 블랙리스트 않으면 서 .
이 .gitignore
작업을 수행 할 파일 :
# First, ignore everything
*
# Now, whitelist anything that's a directory
!*/
# And all the file types you're interested in.
!*.one
!*.two
!*.etc
세 수준의 구조에서이 테스트를 위해 화이트리스트 .txt
의 존재 파일 *.one
, *.two
그리고 *.three
사용하여 파일 .gitignore
나를 위해 작품 - 저장소의 루트 디렉토리에 위치한. .gitignore
구조의 모든 디렉토리에 파일 을 추가 할 필요는 없습니다 .
대답은 온에서 정보 나 다른 것들 사이에, 그림에 사용 이 (stackoverflow.com).
!.gitignore
사용할 때 항목도 필요 *
하지 않습니까?
/*
최상위 폴더 만 블랙리스트에 추가하는 것이 더 유용 할 수 있지만 모든 폴더를 재귀 적으로 차단하는 것은 아닙니다. 이는 실제로 .gitignore
화이트리스트 폴더의 하위 폴더를 조사해서는 안된다는 것을 의미 합니다.
이를 달성하는 더 간단한 방법은 다음과 같습니다.
# Blacklist all files...
*.*
# ...except the ones we want
!*.txt
이는 파일 아래의 모든 레벨에 gitignore
시작하지 않는 패턴을 적용 하기 때문에 작동 합니다./
.gitignore
패턴의 시작 또는 중간 (또는 둘 다)에 구분 기호가있는 경우 패턴은 특정 .gitignore 파일 자체의 디렉토리 수준에 상대적입니다. 그렇지 않으면 패턴은 .gitignore 수준 아래의 모든 수준에서도 일치 할 수 있습니다.
디렉토리 내부의 파일에이 작업을 수행하려면 상황이 더 복잡해집니다.
# Blacklist all files in all directories inside subdir...
/subdir/**/*.*
# ...except the ones we want
!/subdir/**/*.txt
이것은 다음에 gitignore
대한 특별한 규칙 이 있기 때문에 작동 합니다 **
.
**
전체 경로 이름과 일치하는 패턴에서 연속 된 두 개의 별표 ( " ")는 특별한 의미를 가질 수 있습니다.
- 슬래시와 연속 된 두 개의 별표, 슬래시는 0 개 이상의 디렉토리와 일치합니다. 예를 들어 "
a/**/b
"는 "a/b
", "a/x/b
", "a/x/y/b
"등과 일치 합니다.
핵심은 디렉토리를 무시하지 않는 것입니다. 다른 규칙에 관계없이 해당 디렉토리 내의 모든 파일이 무시되기 때문입니다.
나는 오랫동안 검색했다.
~ 100.000 디렉터리가 재귀 적으로 중첩 된 큰 폴더 구조가 있다고 가정합니다. 이 폴더에는 약 30.000 유형의 파일이 있습니다 .txt
(제 경우에는 type *.md
). 이 *.md
파일 옆 에는 추적하고 싶지 않은 500GB (백만 개 이상의) 파일이 있습니다.
나는 단지 추적 이눔 원하는 .txt
(또는 *.md
모든 폴더와 하위 디렉토리에) 파일을.
정답은 Git에서는 불가능합니다.
대신 내가 한 일 :
[편집 : 작동하지 않음-심볼릭 링크 (또는 하드 링크)가있는 폴더를 만들고 거기에서 git을 사용하려고 시도했지만 git은 심볼릭 링크를 따르지 않고 하드 링크를 덮어 씁니다. 도!]