자식 무시 예외


326

gitignore 파일이 있는데 gitignore 파일은 파일을 무시 *.dll하고 실제로는 내가 원하는 동작입니다. 그러나 예외를 원한다면 (즉 foo.dll, 커밋 할 수 있도록 ) 어떻게 이것을 달성 할 수 있습니까?



fwiw,이 주제에 대한 중복 답변의 할아버지-당신은 간과 해야 할 것입니다-.gitignore는 아마도 매우 규칙적인 활동과 몇 가지 좋은 답변과 같은 몇 가지 파일을 제외한 모든 것을 무시하게 될 것입니다 . 나는 이 답변 의 특정 팬이며 명확하고 철저한 것 같습니다.
Kay V

답변:


447

사용하다:

*.dll    #Exclude all dlls
!foo.dll #Except for foo.dll

에서 gitignore :

선택적 접두사! 패턴을 무효화합니다. 이전 패턴에서 제외 된 일치하는 파일은 다시 포함됩니다. 부정 패턴이 일치하면 우선 순위가 낮은 패턴 소스보다 우선합니다.


22
@Matiss Jurgelis의 답변 양식도 참조하십시오 – 중요 추가 사항
Dan

7
전역 gitignore가 아닌 프로젝트의 gitignore에 예외를 추가 할 수 있습니까? 예를 들어, 디렉토리에 모든 DLL을 포함하려면? 내 gitignore_global에 포함 *.dll되어 있고 내 프로젝트의 gitignore에는 !Libs/*.dll있지만 작동하지 않는 것 같습니다.
Joel Kinzel

1
@jkinz, 당신은 시도해야합니다 !Libs/**/*.dll.
Rosberg Linhares

!**/Libs/*.dll폴더 구조에 따라 @RosbergLinhares 또는 .
JAB December

2
고맙지 만, Mac !foo.dll에서는 명령 과 동일한 줄에 주석을 추가 하면 명령이 무효화됩니다. 별도의 행에 주석을 추가하면 작동합니다.
Giacomo

261

Git은 다음과 같이 쓸 경우 폴더를 무시합니다.

/js

당신이 할 경우 만 예외를 추가 할 수 없습니다 : !/js/jquery하거나 !/js/jquery/또는!/js/jquery/*

다음과 같이 작성해야합니다.

/js/* 

그런 다음에 만 이와 같은 하위 폴더를 제외하고

!/js/jquery

44
매우 중요합니다. 감사합니다!
VisioN

3
그러나 당신이 예는 중첩 된 폴더를 추가 할 수 없습니다처럼 보이는 !/js/jquery/xyzlib... 무시하지 않을 것이다
무지

2
@Ignorant가 말했듯이 무시 규칙에서 "제외"한 폴더는 "*"와 같은 위치에 있어야합니다.
Red Pea

3
그래서 /js/*, !/js/jquery, /js/jquery/*, !/js/jquery/xyzlib? 오히려 재미있는 방법 같은 느낌이 ...
Imperishable Night

당신은 정말 나를 도왔습니다.
Loyea

55

간단하게 할 수 있습니다 git add -f path/to/foo.dll.

.gitignore 일반적인 추적 및 다음과 같은 항목의 파일 만 무시합니다. git add .


4
자세한 내용 -f은 git에게이 파일을 repo에 강제로 추가하도록 지시합니다.gitignore
RPDeshaies

파일이 하나만 있으면 좋으며 패턴이 필요한 경우에는 유용하지 않습니다
Liam


15

!제외 규칙 앞에 추가 하면됩니다.

gitignore 매뉴얼 페이지 에 따르면 :

패턴의 형식은 다음과 같습니다.

...

  • 선택적 접두사! 패턴을 무효화합니다. 이전 패턴에서 제외 된 일치하는 파일은 다시 포함됩니다. 부정 패턴이 일치하면 우선 순위가 낮은 패턴 소스보다 우선합니다.


4

Visual Studio로 작업하고 .dll이 bin폴더에 있으면 .dll 파일에 대한 예외를 추가하기 전에 특정 bin 폴더 자체에 대한 예외를 추가해야합니다. 예 :

!SourceCode/Solution/Project/bin
!SourceCode/Solution/Project/bin/My.dll

기본 Visual Studio .gitignore파일에 대한 무시 패턴이 포함되어 있기 때문 입니다.[Bbin]/

이 패턴은 모든 bin 폴더 (및 결과적으로 해당 내용)를 압축하여 내용을 중복하여 포함하려고 시도합니다 (폴더 자체가 이미 무시되었으므로).

실행하여 파일이 제외되지 않은 이유를 찾을 수있었습니다.

git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll

Git Bash 창에서. 이것은 [Bbin]/패턴을 반환했습니다 .


2

해결책은 git ignore 규칙과 예외 규칙 간의 관계에 따라 다릅니다.

  1. 동일한 수준의 파일 / 파일 : @Skilldrick 솔루션을 사용하십시오 .
  2. 폴더 / 하위 폴더 : @Matiss Jurgelis 솔루션을 사용하십시오 .
  3. 다른 레벨의 파일 / 파일 또는 파일 / 하위 폴더 : 다음을 수행 할 수 있습니다.

    *.suo
    *.user
    *.userosscache
    *.sln.docstates
    
    # ...
    
    # Exceptions for entire subfolders
    !SetupFiles/elasticsearch-5.0.0/**/*
    !SetupFiles/filebeat-5.0.0-windows-x86_64/**/*
    
    # Exceptions for files in different levels
    !SetupFiles/kibana-5.0.0-windows-x86/**/*.suo
    !SetupFiles/logstash-5.0.0/**/*.suo
    

1

Git 2.7.0부터 Git은 예외를 고려합니다. 공식 출시 노트에서 :

  • 나중에 "! / abc / def"가 동일한 .gitignore 파일에 나타나는 이전 "/ abc"를 재정 의하여 "/ abc 디렉토리의 모든 항목은 무시하고 ..."를 쉽게 표현할 수 있도록합니다.

https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt


1
이것은 누구에게나 효과가 있습니까? 나를 위해 작동하지 않는 것 같습니다.
Ankur
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.