추적되지 않은 파일 목록에 .gitignore가 나타나지 않도록하려면 어떻게해야합니까?


971

방금 git init새 프로젝트의 뿌리를 밟았습니다.

그런 다음 .gitignore파일을 만들었습니다 .

이제을 입력 git status하면 추적되지 않은 파일 목록에 .gitignore 파일이 나타납니다. 왜 그런 겁니까?


13
git add self && git commit -m "-1 for reverting existential depression" && git remote rm HEAD
— Alastair

1
.git / 폴더를 무시하고 ".gitignore"에 넣을 수 있습니까?
— Timo

2
Linux의 홈 폴더에 전역 "gitignore"를 만들어 저장할 수 있습니다. git config --global core.excludesfile ~ / .gitignore_global
— Timo

14
나는 검색 how to gitignore .gitinore file을 통해 여기에 왔으며 질문과 대답은 실제로 제목과 관련이 없습니다. 제목이 향상 될 수 있습니다.
— m.rufca

6
.gitignore를 무시하는 사용 사례가 있습니다. 팀의 워크 플로에서 로컬 개발 환경의 파일 세트를 변경해야하지만 커밋해서는 안됩니다. 더 나은 아키텍처로 워크 플로우를 개선 할 수는 있었지만 제 손에 들지 않았습니다. 그동안 git이 해당 파일에주의를 기울이는 것은 책임입니다. 따라서 나는 그것들을 gitignore하고 싶지만 로컬에서만하고 싶습니다. 팀과 공유해서는 안되기 때문에 .gitignore를 커밋 할 위험을 감수하고 싶지 않습니다.
— Mark

답변:


959

.gitignore로 실제로, 추가에 최선을 다하고해야하므로 파일 저장소에 있어야 git status제안한다. 변경 사항을 병합 할 수 있도록 저장소 트리의 일부 여야합니다.

따라서 저장소에 추가하십시오.

당신은 정말 당신이 추가 할 수 있습니다 원하는 경우 .gitignore받는 .gitignore파일 당신은 최선을 다하고하지 않으려면. 그러나이 경우 .git/info/exclude.gitignore와 동일하게 작동하지만 .git폴더 에 있으므로 "git status"에 표시되지 않는 특수 체크 아웃 로컬 파일 인 ignores 를에 추가하는 것이 좋습니다 .

참조 https://help.github.com/articles/ignoring-files


17
이것이 추적되는 파일이 아니라 리포지토리의 메타 데이터에 포함되어서는 안됩니까?
— endolith

13
저장소 메타 데이터는 저장소에 대해 로컬입니다. 예를 들어 리포지토리에 커밋 후크를 추가하고 누군가가 리포지토리를 복제하면 커밋 후크를 얻지 못합니다.
— August Lilleaas

91
@wukong, 팀에서 일하고 있다면 모두가 같은 파일 세트를 무시해서는 안됩니까? .gitignore 파일이 리포지토리에 추가되는 이유입니다. 아무도 프로젝트의 일부로 배포해야한다고 말하지 않습니다.
— Ryan Lundy

13
@endolith and wukong 그것은 당신의 저장소에 파일 일 필요는 없습니다. 여러 곳에서 무시 설정을 할 수 있습니다. GitHub는 help.github.com/ignore-files 에 대한 훌륭한 기사를 가지고 있습니다. 전역 무시 설정을 어디서나 사용할 수 있으며 리포지토리 의 .git 메타 데이터에 리포지토리 별 설정을 지정할 수 있습니다.
— Boushley

6
@ deed02392이 무시 파일을 사용할 때는 확실히 당신이 그 파일에 넣은 것을 판단해야하지만, 여전히 큰 용도로 사용됩니다. 예를 들어 Vim을 사용하므로 전역 gitignore에서 * .swp 파일이 무시 된 것으로 표시되어 있습니다. 이렇게하면 각 프로젝트에 추가 할 필요가 없으며 vim을 사용하지 않는 사람들은 걱정할 필요가 없습니다.
— Boushley

282

Git 트리 외부에 무시 된 파일 목록을 저장하려면 .git / info / exclude 파일을 사용할 수 있습니다 . 리포지토리 체크 아웃에만 적용됩니다.


19
+1, 이것은 emacs * ~ 백업 파일, OS X의 .DS_Store 등과 같은 프로젝트 관련이없는 것을 무시하기에 좋습니다.
— August Lilleaas

38
@AugustLilleaas 개인적으로 이러한 유형의 {editor, plat} 관련 파일을 넣는 것을 선호 ~/.gitignore하므로 내가 작업하는 모든 저장소에서 무시됩니다.
— 마이클 미어

22
파일을 추적 한 후에는 git update-index --assume-unchanged <file>저장소를 변경하지 않고 변경 내용 추적을 중지 할 수 있습니다 . 이 기능은 로컬 변경이 필요한 대규모 공유 프로젝트에서 매우 유용하지만 다른 사람이 자신의 물건을 리포지토리에 바치는 것을보고 싶어하지 않습니다.
— Chris Esplin

6
@ AugustLilleaas : 사용자 당 gitignore 가 그 사용 사례에 더 좋습니다.
— 기계 달팽이

3
이 팁에 감사드립니다. 저는 git-svn을 사용하고 있으므로 서버에있는 svn 저장소의 다른 사용자는 .gitignore를 체크인하지 않으려 고합니다.
— enorl76

74

실제로 파일에 줄을 .gitignore넣을 수 .gitignore있습니다. 이로 인해 .gitignore파일이 git에 의해 무시됩니다. 나는 이것이 좋은 생각이라고 생각하지 않습니다. 무시 파일은 버전 제어 및 추적되어야한다고 생각합니다. 나는 이것을 완전성을 위해 거기에 내놓고 있습니다.


7
나를 위해 일했다! 버전 1.5.6.5. 또한 1800 INFORMATION에 동의하지 않는 것이 좋지만 특정 상황에서는 git-svn 저장소를 사용하고 git-ish 파일이 svn으로 이동하는 것을 원하지 않는다고 생각합니다. 제외 파일이 더 좋습니다.
— J. Polfer

4
@ehsanul-파일을 추적하지 않아야합니다 (파일을 추가하거나 커밋해서는 안 됨). 추적을 해제 할 수 있습니다. 이것은 아마도 git-only 환경에서 좋은 아이디어는 아니지만, git을 서브 버전 저장소의 스마트 클라이언트로 사용하는 경우 (나머지 <maniacal laughter>)-그러한 트릭은 훌륭합니다.
— Tomasz Gandor

2
@IshanSrivastava 파일을 이미 추적했을 것입니다. 달리기git rm --cached .gitignore
— Gideon

51

모든 repos에 .gitignore자동으로 적용 되는 전역 사용자 git 파일을 가질 수도 있습니다 . 이것은 IDE 및 편집기 파일 (예를 들어, 유용합니다 및 빔에 대한 파일). OS에 맞게 디렉토리 위치를 변경하십시오.swp*~

  1. ~/.gitconfig파일에 추가 하십시오.

    [core]
    excludesfile = /home/username/.gitignore
    
  2. ~/.gitignore무시할 파일 패턴으로 파일을 작성하십시오 .

  3. 도트 파일을 다른 저장소에 저장하여 백업을하십시오 (선택 사항).

repo를 복사, 초기화 또는 복제 할 때마다 전역 gitignore 파일도 사용됩니다.


6
나는 이것이. *. swp (VIM) 및 ._ * (TM)과 같은 임시 파일 뒤에 편집기가 남아있는 상황에 가장 적합한 솔루션이라고 생각합니다. 다른 IDE를 사용하는 다른 사용자가 이러한 파일을 확인하도록합니다.
— 토마스 헌터 II

1
이것은 어떤 브랜치에도 푸시해서는 안되는 무시를 위해 훌륭하게 작동합니다. 물론 'username'을 실제 사용자 이름으로 바꾸고 이미 존재하는 경우 .gitconfig에 두 번째 [core] 섹션을 추가하지 마십시오. 기존 [core] 섹션 아래에 excludesfile 행을 넣으십시오.
— emery

47

누군가 이미 .gitignore리포지토리 에 a 를 추가 했지만 일부를 변경하고 해당 변경을 무시하려면 다음을 수행하십시오.

git update-index --assume-unchanged .gitignore

소스 .


5
나쁜 생각, 이유 .git/info/excludes가 존재합니다.
— Arrowmaster

6
나도 이유 --assume-unchanged가 있다고 생각 합니다. 왜 하나가 다른 것보다 낫습니까?
— Leif Gruenwoldt

9
.git/info/excludes파일이 이미 추적 된 경우 btw 가 작동하지 않습니다.
— Leif Gruenwoldt

이것은 실제로 커밋되어 변경 사항을 커밋하고 싶지 않은 .gitignore와 관련하여 실제로 도움이되었습니다. Ubuntu 11.04 repos에서 git 1.7.4.1을 실행 중이며 도움말 페이지가 이것을 업데이트 색인에 추가합니다. "이 옵션은 추적 된 파일에서 커밋되지 않은 변경 사항 (트랙킹되지 않은 파일에 대한 .gitignore의 기능과 유사)을 무시하기위한 대략적인 파일 수준 메커니즘으로도 사용될 수 있습니다. 인덱스에서이 파일을 수정해야하는 경우 Git은 정상적으로 작동합니다. 예를 들어 커밋에서 병합 할 때 추적되지 않은 파일이 업스트림으로 변경되는 경우 상황을 수동으로 처리해야합니다. "
— YonahW

나는 일반적으로 마스터 리포지토리 초기 상태 에이 작업이 필요하고 git 기능의 이점을 유지하기 때문에이 답변에 투표합니다. 이 파일을 무시할 이유가 없습니다. (마침표)
— Lazaros Kosmidis

37

.gitignore파일 을 추가 하고 커밋 한 후에 는 더 이상 "추적되지 않은 파일"목록에 표시되지 않습니다.

git add .gitignore
git commit -m "add .gitignore file"
git status

20

다른 사람이 우리와 똑같은 고통을 겪을 수 있습니다. 이미 커밋 된 파일을 제외하고 싶었습니다.

이 게시물은 더 유용했습니다. .git / info / exclude 작업이 너무 늦었습니다.

특히 파일을 무시해야 할 것은 실제로 git remove 명령을 사용하는 것입니다. git rm 참조 ( http://www.kernel.org/pub/software/scm/git/docs/git-rm.html )

당신은 가서 그것을 테스트

git rm --dry-run *.log
(모든 로그 파일을 제외시키려는 경우)

어떤이가 출력 될 것입니다 당신이 그것을 실행 한 경우 제외.

그때

당신은 가서 그것을 실행

git rm *.log
(또는 원하는 파일 이름 경로 / 표현식)

그런 다음 파일에 *.log줄을 추가 .gitignore하십시오.


4
물론 .gitignore에 관련 패턴 (예 : * .log)을 추가하여이 작업을 수행 할 수 있으므로 git status나중에 표시 될 경우 혼란을 일으키지 않습니다 .
— Patrick O'Leary

2
내 문제는 OP와 관련이 없지만 .gitignore (파일이 이미 커밋 된 경우)를 변경 한 후 RM을 사용하여 리포지를 정리해야한다는 것을 알려 주셔서 감사합니다. 나는 알고 있지만, 이것이 내가 개인적으로 누군가가 언급 한 것을 처음 본 곳이었습니다.
— Mike

피드백을 주셔서 감사합니다. 그렇기 때문에 제가 쓴 이유는 여기에 와서이 문제를 해결하기 위해 먼 길을 갔다가 그것을 작성하는 것이 좋을 것이라고 생각했습니다. :)
— 진화

16

물론 .gitignore 파일은 추적되지 않기 때문에 상태에 표시되며 git은 파일을 맛있는 새 파일로 간주합니다!

그러나 .gitignore는 추적되지 않은 파일이므로 .gitignore에 넣을 때 git에 의해 무시 될 후보입니다!

따라서 대답은 간단합니다. 다음 줄을 추가하십시오.

.gitignore # Ignore the hand that feeds!

.gitignore 파일로!

그리고 August의 응답과 달리 .gitignore 파일 이 리포지토리에 있어야 한다는 것은 아닙니다 . 그것은 단지 할 수 있는 일이 것이 편리하다, 수. 그리고 이것이 아마도 .gitignore가 .git / info / exclude의 대안으로 생성 된 이유 일 것입니다.이 저장소에는 추적 할 수있는 옵션이 없습니다. 어쨌든 .gitignore 파일 사용 방법은 전적으로 귀하에게 달려 있습니다.

자세한 내용 은 kernel.org 에서 gitignore (5) 맨 페이지 를 확인하십시오 .


15

아이디어는 프로젝트 .gitignore와 관련된 파일을 파일에 넣고 이미 언급했듯이 저장소에 추가하는 것입니다. 예를 들어 .pyc및.o 파일, 테스트 슈트가 생성 한 로그, 일부 조명기 등

자체 설정에서 생성하지만 모든 사용자에게 반드시 표시되지는 않는 .swp파일 ( vim을 사용하는 경우 파일, 숨겨진 ecplise 디렉토리 등)에 대해서는 .git/info/exclude이미 언급 한대로 사용해야합니다 .


14

우선, 다른 많은 사람들이 이미 말했듯이, .gitignoreGit이 추적 해야하므로 무시해서는 안됩니다. 이유를 설명하겠습니다.

(TL; DR : .gitignore파일을 커밋하고 전역.gitignore 을 사용 하여 IDE 또는 운영 체제에서 작성된 파일을 무시하십시오)

Git은 이미 알고 있듯이 분산 버전 제어 시스템 입니다. 즉, 개발이 다른 지점으로 분기 된 경우에도 다른 버전간에 전환 할 수 있으며 여러 개발자가 동일한 프로젝트에서 작업 할 수 있습니다.

.gitignore스냅 샷간에 전환 할 때 추적 기능 에도 이점이 있지만이 를 커밋하는 가장 중요한 이유는 동일한 프로젝트에서 작업중인 다른 개발자와 파일을 공유하고 싶기 때문입니다. 파일을 Git에 커밋하면 다른 제공자가 .gitignore저장소를 복제 할 때 자동으로 파일을 가져 오므로 커밋해서는 안되는 파일 (예 : 로그 파일, 캐시 디렉토리, 데이터베이스 자격 증명)을 실수로 커밋 할 염려가 없습니다. 등). 어떤 시점에서 프로젝트 .gitignore가 업데이트되면 파일을 수동으로 편집하지 않고 변경 사항을 가져올 수 있습니다.

물론 무시하고 싶은 파일과 폴더가 있지만 특정 파일은 다른 개발자에게 적용되지 않습니다. 그러나 이것들은 프로젝트 안에 있지 않아야합니다 .gitignore. 파일과 폴더를 무시할 수있는 다른 두 곳이 있습니다.

  • 운영 체제 나 IDE에서 만든 파일과 폴더는 전역에.gitignore 배치해야합니다 . 이점은 .gitignore컴퓨터의 모든 리포지토리에 적용되므로 모든 리포지토리에 대해이 작업을 반복 할 필요는 없습니다. 다른 운영 체제 및 / 또는 IDE를 사용하고있을 수 있으므로 다른 개발자와 공유하지 않습니다.
  • 프로젝트 .gitignore또는 전역에 속하지 않는 파일은의 명시 적 저장소 제외를.gitignore 사용하여 무시할 수 있습니다 . 이 파일은 다른 개발자와 공유되지 않으며 해당 단일 저장소에만 해당됩니다.your_project_directory/.git/info/exclude

글로벌에 대한 좋은 언급.gitignore
— Gruber

초기 설정 후 .gitignore 파일을 무시해야하므로 우발적 인 변경은 없습니다. 더 이상 변경할 수 없다는 의미는 아니지만 어떤 식 으로든 사고로부터 보호됩니다. 해당 파일에 사고가 발생하면 혼란을 초래하거나 일부 작업을 위험에 빠뜨릴 수 있으므로 "밀봉"(자체 무시)도 고려해야합니다.
— 사사

@Sasa .gitignore는 아직 Git에서 추적하지 않는 파일을 무시하는 경우에만 작동합니다. 이미 추적 된 파일을 추가해도 .gitignore해당 파일에 대한 변경 사항을 커밋 할 수 있습니다. 이것이 가능하더라도 .gitignoreGit이 자신을 무시하도록 지시 할 때 어떻게 변경 사항 을 커밋 합니까?
— Nic Wortel

@ Nic-나는이 스레드의 맨 아래에있는 별도의 회신에서 내 견해에 대한 자세한 설명을 전달했습니다.
— Sasa

12

다음과 같은 "문제"에주의하십시오. 때때로 디렉토리를 추가하고 싶지만 해당 디렉토리 내에 파일은 없습니다. 간단한 해결책은 다음 내용으로 .gitignore를 만드는 것입니다.

*

이 솔기는 디렉토리가 추가되지 않았다는 것을 알 때까지 잘 작동합니다 (저장소에 예상대로. 그 이유는 .gitignore도 무시되어 디렉토리가 비어 있기 때문입니다. 따라서 다음과 같이해야합니다. :

*
!.gitignore

9

이것은 현재 디렉토리에서만 Git저장소의 모든 파일을 무시 하도록 작동하는 것 같습니다 .

이 파일을 업데이트

.git/info/exclude 

와일드 카드 또는 파일 이름으로

*pyc
*swp
*~

5

.gitignore에 이미 체크인했고 수정을 무시하려면 이 답변을 확인하십시오 .

이 명령을 사용해보십시오 :

git update-index --assume-unchanged FILENAME_TO_IGNORE

변경 사항을 커밋하려면 다음을 사용하십시오.

git update-index --no-assume-unchanged

업데이트 :

현재 디렉토리에 '변경되지 않은 것으로 가정' 파일 을 나열하는 방법은 다음과 같습니다 .

git ls-files -v | grep -E "^[a-z]"

는 AS -v옵션에 대한 소문자를 사용합니다 파일 '불변을 가정'.


4

제 경우에는 기존 파일을 제외하고 싶습니다. .gitignore 만 수정하면 작동하지 않습니다. 나는 다음 단계를 따랐다.

git rm --cached dirToFile/file.php
vim .gitignore
git commit -a

이 방법으로 제외하려는 파일을 캐시에서 정리하고 .gitignore에 추가 한 후 정리 했습니다 .


나를위한 최고의 솔루션. git add을 사용할 수도 있습니다. 두 번째 장소에서 git commit -m "fixing .gitignore"
— brainray

3

git repo의 기본 디렉토리로 이동하여 다음 명령을 실행하십시오.

echo '\\.*' >> .gitignore

맥에 있다면 그 성가신 .DS_Store를 포함한 모든 도트 파일은 무시됩니다.


4
나는 그렇게하지 않을 것입니다. 필요한 도트 파일이있을 수 있습니다. 대신 문자 그대로 .gitignore 및 .DS_Store를 추가합니다.
— Edward Falk

2

Eclipse에서 생성 된 IDE 특정 폴더가 NetBeans 또는 다른 IDE와 같지 않기 때문에 최종 사용자가 Git이 ".gitignore"파일을 무시하도록 할 가능성이 있습니다. 따라서 소스 코드 IDE를 적대적으로 유지하려면 개별 개발자가 다른 IDE를 사용하고 있기 때문에 전체 팀과 공유하지 않는 사용자 정의 자식 무시를 쉽게 할 수 있습니다.


1

.gitignore다른 파일을 무시 하는 것입니다. git은 파일에 관한 것이므로 파일을 무시하는 것입니다. 그러나 git이 파일을 처리 할 때 다른 파일 이름을 나열하는 메커니즘 으로이 파일이 있어야합니다.

그것이 불렸다 .the_list_of_ignored_files면 조금 더 분명 할 것입니다.

유추는 원하지 않는 할 일 목록입니다. 당신이 그들을 어딘가에 나열하지 않으면 그들에 대해 알지 못하는 일종의 '할 일'목록이 있습니다.


1

gitignore를 무시하는 것이 매우 유용한 상황이 있다고 생각합니다. 예를 들어, 동일한 코드베이스에서 여러 팀 또는 큰 팀이 작업하는 경우입니다. 이 경우 특정 규칙이 필요합니다.이 규칙 중 하나는 git repo에서 무시되는 내용과 관련이 있습니다. 일반적으로 IDE 또는 OS로 생성 된 파일과 디렉토리, 생성 된 일부 로그 등을 무시하는 것입니다.

그러나 .gitignore파일에 비 전통적인 변경을 일으키는 경향이 있습니다. 그만큼.gitignore파일이 추가로 사용, 또는 다른 어떤 경우에하는 도구로, 실수로, 무책임한 사람에 의해 변경 될 수 있습니다.

이에 대한 반력을 갖기 위해 다음과 같이 할 수 있습니다.

  1. 초기 .gitignore는 팀의 규칙을 반영해야합니다.
  2. 푸시 한 후에는 .gitignore 항목을 추가하여 .gitignore를 보호하고 변경 사항을 다시 푸시해야합니다. .gitignore파일은 이러한 방식으로 " 봉인 "됩니다.

" 밀봉 된 ".gitignore 파일은 체인저를 다른 팀 구성원에게 전파하지 않고 로컬로만 변경할 수 있습니다. 그러나 팀 전체에서 변경 사항이 "밀봉 해제"할 수있는 것보다 광범위하게 합의 된 경우 변경 한 후 다시 "밀봉"하는 것보다 변경하십시오. 실수로, 의도적으로 만 할 수는 없습니다.

슬프게도, 당신은 어리 석음으로부터 100 % 보호받을 수 없지만, 이런 식으로 당신은 어리석은 일이 일어나지 않도록 할 수있는 모든 것을 다했습니다.

당신이 아주 훌륭한 전문가들로 구성된 비교적 작은 팀을 가지고 있다면, 이것은 중요하지 않을 것입니다. 그러나 그 사람들조차도 걱정할 것이 적은 것을 감사하게 생각할 것입니다.

사용 .git/info/exclude** 당신이 당신 자신의을 포함, 인프라 설정에 대한 아무것도 할 수 없을 때 냉각되어 실수를하지.

옳고 그른 것의 입장에서 나는 .gitignore파일에 .gitignore 항목을 가지고 투표 하여 모든 사람들이 원하는 것을 로컬로 할 수는 있지만 다른 사람들을 침범하지는 않는다고 투표 하고 있습니다.


0

성가신 .DS_Store파일에 대한 무시를 설정하는 가장 좋은 장소 는 파일에 있다는 것을 알았습니다 .git/info/exclude.

IntelliJ는 git 저장소를 설정할 때 자동으로 수행하는 것 같습니다.


1
사용자의 글로벌 무시 파일 된 .DS_Store 무시하는 더 나은 곳이 될 것입니다
— 최대 Nanasy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.