추적되지 않은 파일 목록에 .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.