여러 개의`.gitignore`가 눈살을 찌푸리고 있습니까?


239

리포지토리가 여러 개의 독립적 인 프로젝트로 구성되어 있지 않으면 리포지토리 .gitignore의 루트에 여러 파일보다 하나의 파일 만있는 것이 가장 간단한 것 같습니다 . 한 접근법이 다른 접근법보다 나을 때의 온라인 또는이 분석에 대한 표준 모범 사례가 있습니까?

답변:


254

.gitignore다른 (하위) 디렉토리에 여러 파일 을 갖고 싶은 두 가지 이상의 상황을 생각할 수 있습니다 .

  • 다른 디렉토리는 무시할 파일 유형이 다릅니다. 예를 들어 .gitignore프로젝트의 최상위 디렉토리에서 생성 된 프로그램 Documentation/.gitignore은 무시하고 생성 된 문서는 무시합니다.

  • 단지 주어진 (하위) 디렉토리에 (당신이 사용할 수있는 특정 파일을 무시 /sub/foo.gitignore불구하고).

에 그 패턴을 기억하십시오 .gitignore패턴은 '/'포함하지 않는 파일, 파일에있는 (하위) 디렉토리 및 모든 서브 디렉토리에 재귀 적으로 적용 (그래서 예를 들어 패턴 name라는 이름의 파일에 적용 name하면서, 주어진 디렉토리와 모든 서브 디렉토리에있는 /name파일에 적용 주어진 디렉토리에서만이 이름으로).


1
아아, 어떤 이유로 /Documentation/*.html이 이것을 다룰 것이라고 생각했지만 * 와일드 카드는 한 수준의 디렉토리와 만 일치한다고 생각합니다.
Conley Owens

9
@ConleyOwens : 현대적인 Git을 사용하면 사용할 수 있습니다 Documentation/**/*.html(슬래시가 패턴을 고정하고; /foo파일을 디렉토리에 직접 고정하는 데 사용됨)
Jakub Narębski

97

접선으로, 여러 .gitignore파일 을 가질 수있는 기능 이 매우 유용한 경우는 작업 사본에 커밋하지 않을 추가 디렉토리를 원하는 경우입니다. .gitignore해당 디렉토리에 1 바이트 (단일 별표 포함)를 넣으면 절대로 표시되지 않습니다 git status.


4
".git / info / exclude"파일을 사용할 수도 있습니다
Ayell

10
물론, 저장소 루트 어딘가에있는 위치에서 파일을 열어야하는 불편 함이 마음에 들지 않으면 전체 경로를 작성한 다음 디렉토리를 삭제하는 경우 / 삭제할 때 항목을 정리해야합니다. 와 비교하십시오 printf \* > .gitignore(디렉토리를 삭제하면 정리가 자동으로 수행됩니다). .git/info/exclude더 적절한 선택이지만 많은 것은 아닌 상황이 있다고 확신 합니다.
아리스토텔레스 Pagaltzis

예, 폴더 대신 파일을 제외하려면 다음과 같이하십시오. 예 : p
Ayell

4
내 대답에 "커밋하지 않으려는 작업 디렉토리에 추가 디렉토리를 원한다면"이라고 대답했습니다.
아리스토텔레스 Pagaltzis

1
루트 .gitignore에서 덜 혼란 스럽기 때문에이 접근법이 많이 좋습니다.
David A. Grey

59

.gitignore물론 자체 디렉토리에 여러 개를 가질 수 있습니다 .
파일 무시에 책임이있는 gitignore 규칙을 확인하려면 다음을 사용 git check-ignore하십시오 git check-ignore -v -- afile.

그리고 .gitignore브랜치마다 다른 버전의 파일을 가질 수 있습니다 . 하나의 브랜치가 파일을 무시하고 다른 브랜치가하지 않도록하는 종류의 구성을 이미 보았습니다 . 예를 들어이 질문을 참조하십시오 .

리포지토리에 여러 개의 독립적 인 프로젝트가 포함 된 경우 하위 모듈 로 참조하는 것이 가장 좋습니다 .
이것이 실제 모범 사례가 될 수 있으며, 이러한 프로젝트 각각 .gitignore은 글로벌 상위 프로젝트의 특정 개정판에서 참조하면서 개별 파일 (각 해당 파일 과 함께)을 복제 할 수 있습니다 .
자세한 내용 은 서브 모듈의 본질을 참조하십시오 .


git 1.8.2 (2013 년 3 월) 이후 ' '에 적용 git check-ignore -v -- yourfile되는 gitignore 실행을 확인하기 .gitignore위해 ' yourfile'에 적용 할 수 있으며 해당 파일이 무시되는 이유를 더 잘 이해할 수 있습니다.
" 내 규칙을 무시 하는 gitignore규칙은 무엇입니까? "


17

프로 싱글

  • 찾기 쉽다.

  • 리포지토리의 여러 레벨에서 여러 개의 gitignore가있는 경우 제외 규칙을 사냥하는 것은 매우 어려울 수 있습니다.

  • 여러 파일을 사용하면 일반적으로 상당한 중복이 발생합니다.

프로 멀티

  • 범위는 필요한 파일 트리 부분에 대한 "지식"입니다.

  • Git은 파일 만 추적하기 때문에 빈 .gitignore가 "빈"디렉토리를 커밋하는 유일한 방법입니다.

    (그리고 Git 1.8 이전에는 패턴을 제외하는 유일한 방법은 패턴 my/**.example으로 작성 my/.gitignore하는 것이 었습니다 **.foo.이 이유는 지금 할 수있는 것처럼 적용되지 않습니다 /my/**/*.example.)


모든 제외 항목을 찾을 수있는 단일 파일을 선호합니다. 나는 디렉토리 당 .svn을 놓친 적이 없으며 디렉토리 당 .gitignore도 놓치지 않을 것입니다.

즉, 여러 gitignores가 일반적입니다. 당신이 그들을 사용하는 경우, 그들과 함께 일하기에 합리적이어야합니다. 예를 들어, 루트에서 한 레벨 만 디렉토리에 넣을 수 있습니다.


"빈 .gitignore가"빈 "디렉토리를 커밋하는 유일한 방법입니다." 실제로 하나의 README 파일 (또는 empty그 문제의 이름 을 가진 파일)을 업로드하는 것이 더 일반적 이라는 것을 알았습니다 .
Marc.2377

6
.gitkeep은이 작업을 수행하는 좋은 방법입니다. 또 다른 규칙입니다. readme 파일을 사용하는 아이디어가 마음에 듭니다. 그 이유는 readme 파일에서 디렉토리가 무엇인지 설명 할 수 있기 때문입니다.
Gavin Pickin 2016 년

8

디렉토리를 Git 리포지토리에 커밋하지만 파일이없는 시나리오 (예 logs: cache,, uploads디렉토리 등)가 많이 있습니다.

그래서 내가 항상하는 일은 .gitignore다음 내용을 가진 디렉토리에 파일 을 추가하는 것입니다 .

*
!.gitignore

.gitignore파일을 사용하면 Git은 해당 디렉토리의 파일을 추적하지 않지만 여전히 .gitignore파일 을 추가 할 수 있으므로 디렉토리 자체를 저장소 에 추가 할 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.