큰 디렉토리 구조에서 gitignore 문제를 해결하려고하지만 내 질문을 단순화하기 위해 다음과 같이 줄였습니다.
새로운 git 저장소에 두 파일 (foo, bar)의 다음 디렉토리 구조가 있습니다 (지금까지 커밋 없음).
a/b/c/foo
a/b/c/bar
분명히 'git status -u'는 다음을 보여줍니다.
# Untracked files:
...
# a/b/c/bar
# a/b/c/foo
내가하고 싶은 것은 a / b / c 내부의 모든 것을 무시하지만 'foo'파일을 무시하지 않는 .gitignore 파일을 만드는 것입니다.
내가 .gitignore를 만들면 :
c/
그런 다음 'git status -u'는 foo와 bar를 무시한 것으로 표시합니다.
# Untracked files:
...
# .gitignore
내가 기대 한대로.
이제 foo에 대한 제외 규칙을 추가하면 다음과 같습니다.
c/
!foo
gitignore 맨 페이지에 따르면, 이것이 효과가있을 것으로 기대합니다. 그러나 그것은 아닙니다-여전히 foo를 무시합니다.
# Untracked files:
...
# .gitignore
이것은 작동하지 않습니다 :
c/
!a/b/c/foo
이것도 마찬가지입니다 :
c/*
!foo
제공합니다 :
# Untracked files:
...
# .gitignore
# a/b/c/bar
# a/b/c/foo
이 경우 foo는 더 이상 무시되지 않지만 bar도 무시되지 않습니다.
gitignore의 규칙 순서는 중요하지 않습니다.
이것은 또한 내가 기대하는 것을하지 않습니다 :
a/b/c/
!a/b/c/foo
그것은 foo와 bar를 모두 무시합니다.
작동하는 한 가지 상황은 a / b / c / .gitignore 파일을 만들고 거기에 넣는 경우입니다.
*
!foo
그러나 이것의 문제는 결국 a / b / c 아래에 다른 하위 디렉토리가 있고 모든 단일 디렉토리에 별도의 .gitignore를 넣기를 원하지 않는다는 것입니다. '프로젝트 기반'.gitignore를 만들고 싶었습니다. 각 프로젝트의 최상위 디렉토리에 있고 모든 '표준'서브 디렉토리 구조를 포함 할 수있는 파일.
이것은 또한 동등한 것으로 보입니다.
a/b/c/*
!a/b/c/foo
이것은 내가 달성 할 수있는 "작동"에 가장 가까운 것일 수 있지만 전체 상대 경로와 명시 적 예외를 명시해야합니다. 다른 수준에서 'foo'라는 이름의 파일이 많이 있으면 고통 스럽습니다. 서브 디렉토리 트리의
어쨌든 제외 규칙의 작동 방식을 잘 모르겠거나 / 와일드 카드가 아닌 디렉토리가 무시 될 때 전혀 작동하지 않습니다.
누구든지 이것에 대해 밝힐 수 있습니까?
gitignore 가이 서투른 쉘 기반 구문 대신 정규 표현식과 같은 합리적인 것을 사용하게하는 방법이 있습니까?
Cygwin / bash3의 git-1.6.6.1 및 Ubuntu / bash3의 git-1.7.1에서 이것을 사용하고 관찰합니다.