점이없는 파일 (확장자가없는 모든 파일)을 gitignore 파일에 어떻게 추가합니까?


110

제목처럼 "점없는 파일"을 gitignore 파일에 추가 할 수 있습니까?

나는 이것이 모든 귀찮은 확장이없는 파일을 처리 할 것이라고 생각합니다.


2
이 당신이 무시하지 않는 일부 확장명이 파일은 다음과 같습니다 README, LICENSE또는 COPYING, INSTALL, Makefile등, 당신은 항상 수 있지만이를 강제로 추가 한 다음 그들이 추적
야쿱 Narębski

@ JakubNarębski 좋은 지적입니다. 더 많은 가시성을 위해 답변에 포함했습니다.
VonC 2013 년

답변:


121

다음과 유사한 조합을 시도 할 수 있습니다.

*
!/**/
!*.*

즉, gitignore제외 규칙 (A 부정 패턴 ), 모든 파일을 무시 연장으로 사람을 제외시켰다해야한다.

Mad Physicist가 아래 에서 언급했듯이 규칙은 다음과 같습니다.

해당 파일의 상위 디렉토리가 제외 된 경우 파일을 다시 포함 할 수 없습니다. (*)
(*: git 2.?+에서 특정 조건이 충족되지 않는 한, 아래 참조)

그렇기 때문에 !/**/파일을 화이트리스트에 추가하려면 중요합니다 (상위 폴더를 재귀 적으로 화이트리스트에 추가).

다음과 같은 유사한 경우에 동일한 규칙을 언급했습니다.


Jakub Narębski가 언급 했듯이 무시하고 싶지 않을 수도 있습니다. 확장 모든 파일 .

내 조언:

  • 중요한 확장 파일을 먼저 추가하십시오.
  • 그런 다음 .gitignore위와 같이 편집하십시오 . 이미 버전이 지정된 파일은 (확장자가 없더라도) 무시되지 않습니다. 나머지는 모두 무시됩니다.

버전을 지정할 향후 확장없는 파일의 경우 :

git add -f -- myFile

git 2.9.x / 2.10 (2016 년 중반?)에서 re-included 경로에 와일드 카드가없는 경우 해당 파일의 상위 디렉토리가 제외 되면 파일을 다시 포함 할 수 있습니다 .

Nguyễn Thái Ngọc Duy ( pclouds) 가이 기능을 추가하려고합니다.

그러나 다시 포함하는 규칙 중 하나는 다음과 같습니다.

다시 포함 규칙의 디렉토리 부분은 리터럴이어야합니다 (예 : 와일드 카드 없음).

이것은 어쨌든 여기서 작동하지 않았을 것입니다.


1
대답은 완전히 정확합니다. 그러나 아마 더 나은 .gitignore**하고 !**.*. 나는 별표가 앞에 배치되어있는 경우이 차이를하지 않습니다 알고 있지만, 쉘이 와일드 카드를 처리하는 방법에 더 명시 적 소리는 ...
윌렘 반 Onsem

7
참고 : 다른 제외 규칙을 사용하려면 .gitignore 파일의 첫 번째 규칙 집합이어야합니다
Erik

확장명이없는 특정 파일을 다시 포함 할 수도 있습니다 (예 : !Makefile. Git 1.7.1에서는이 솔루션에 문제가 있었지만 1.9.0에서는 제대로 작동했습니다. 제 경우에는 루트 디렉토리에 파일을 추가하는 것이 잘 작동했지만 하위 디렉토리 안에 확장자가있는 파일을 추가하는 것은 무시 된 것으로 표시되었습니다. 이것은 1.7.1이 **아직 패턴을 지원하지 않았기 때문인 것 같습니다 . 여기를 보세요!
mxmlnkn

1
**힘내에 추가되었습니다 1.8.2. !*/대신 사용 하는 것에 대한 단점 이 !/**/있습니까?
mxmlnkn

@TamaMcGlinn 정규식처럼 보입니다 : gitignore는 정규식을 지원하지 않습니다.
VonC

50
*
!*/
!*.*

* git에게 모든 것을 무시하도록 지시합니다.

!*/그런 다음 디렉토리 인 모든 것을 무시합니다. 이것은 매우 중요합니다.

!*.* 확장자가있는 모든 파일을 무시합니다.

!*/규칙이 없으면 .이름에가없는 디렉토리 는 나열되지 않으며 원하는 파일이 루트 폴더 외부에 추가되지 않습니다.

참고로 .gitignore 문서 에서 다음 두 섹션을 읽어보십시오 .

선택적 접두사 "!" 패턴을 부정합니다. 이전 패턴에서 제외 된 일치 파일은 다시 포함됩니다. 해당 파일의 상위 디렉토리가 제외 된 경우 파일을 다시 포함 할 수 없습니다. Git은 성능상의 이유로 제외 된 디렉터리를 나열하지 않으므로 포함 된 파일의 모든 패턴은 정의 된 위치에 관계없이 영향을주지 않습니다. 첫 번째 "!"앞에 백 슬래시 ( "\")를 넣으십시오. 리터럴 "!"로 시작하는 패턴 (예 : "! important! .txt")

패턴이 슬래시로 끝나면 다음 설명을 위해 제거되지만 디렉토리와 일치하는 항목 만 찾습니다. 즉, foo /는 디렉토리 foo 및 그 아래의 경로와 일치하지만 일반 파일 또는 기호 링크 foo와 일치하지 않습니다 (이것은 Git에서 일반적으로 pathspec이 작동하는 방식과 일치합니다).


1
잘 잡았습니다. +1. 나는 최근에 다른 내 답변에서 사용한 규칙으로 내 답변을 업데이트하는 것을 잊었습니다. 그에 따라 내 답변을 업데이트했습니다.
VonC 2015

0

내 폴더에는 *.c, *.h, *.txt, *.csv확장자 가없는 파일과 확장자가없는 바이너리 파일 이 많이 있습니다. 그래서 나는 모든 파일 execpt 무시할 필요 *.c,*.h하고 .gitignore,로부터 나를 위해이 작품, 그래서 .gitignore예 :

 */*         #ignore all files in each directory
 !*/*.c      #unignore .c files in each directory
 !*/*.h      #unignore .h header files in each directory
 !.gitignore #unignore .gitignore
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.