Git에서 특정 파일을 무시하는 방법


731

파일이있는 저장소가 Hello.java있습니다. 컴파일하면 추가 Hello.class파일이 생성됩니다.

나는에 대한 항목이 생성 Hello.classA의 .gitignore파일을. 그러나 파일은 여전히 ​​추적되어 나타납니다.

힘내 무시할 수 Hello.class있습니까?


8
"작동하지 않는다"는 것은 무엇을 의미합니까? 저장소에 Hello.class를 이미 추가 했습니까? gitignores는 이미 추적 된 콘텐츠에는 영향을 미치지 않습니다. 예를 들어 stackoverflow.com/questions/1139762/gitignore-file-not-ignoring
Cascabel

1
가능한 Git
Cascabel

답변:


809

문제는 .gitignore이전에 (by git add) 추적하지 않은 파일 만 무시한다는 것 입니다. git reset name_of_file파일의 스테이지를 해제하고 유지하려면 실행하십시오 . 주어진 파일을 리포지토리에서 제거하려면 (푸시 후)를 사용하십시오 git rm --cached name_of_file.


190
이 명령 git rm --cached name_of_file은 git repo에서 파일을 제거합니다. .gitignore 파일에 추가하더라도. 그것은 삭제하는 것을 무시하지 않습니다.
OrwellHindenberg

4
이 경우 OP가 원했던 것 같습니다.
Ondrej Slinták

40
귀하의 솔루션이 @ Kohan95에서 작동하게되어 기쁩니다! 이 질문은 선택한 답변에 따라 이름이 바뀌어야합니다. 내 의견은 명령이 수행하는 작업을 인식하지 못하는 개발자에게 경고 일뿐입니다.
OrwellHindenberg

91
git reset name_of_file추적을 제거하고 파일을 삭제하지 않습니다.
Cees Timmerman

7
시도한 git rm --cached <name_of_file> 리포지토리에서 파일을 삭제했지만 .gitignore 파일에 있으므로 로컬 복사본이 삭제되지 않았습니다. 추가로 디렉토리를 추가하려면 슬래시 '/'를 붙여야합니다. 누군가가 체크인 한 루비 프로젝트에서 ".idea"인 Rubymine의 config 디렉토리를 제거하고있었습니다. 파일에 ".idea /"를 입력 한 다음 "git rm --cached -r .idea"를 넣어 디렉토리와 그 아래의 모든 것을 제거합니다 (git 디렉토리가 아닌 git 버전 파일 만 해당).
Doug Noel

222

새 파일을 무시하는 방법

전 세계적으로

파일에 무시할 경로를 .gitignore파일에 추가하고 커밋 하십시오 . 이 파일 항목은 리포지토리를 체크 아웃하는 다른 사람에게도 적용됩니다.

토지 상에서

파일에 무시하려는 경로를 .git/info/exclude파일에 추가하십시오. 이 파일 항목은 로컬 작업 복사본에만 적용됩니다.

변경된 파일을 무시하는 방법 (일시적으로)

변경된 파일이 수정 된 것으로 표시되는 것을 무시하기 위해 다음 git 명령을 사용할 수 있습니다.

git update-index --assume-unchanged <file>

이 무지를 되돌리려면 다음 명령을 사용하십시오.

git update-index --no-assume-unchanged <file>

현재 API 키를 보유한 파일이 github에 푸시되는 것을 방지하는 데 적합합니다!
Jim In Texas

1
@Xman 왜 일시적이라고 했습니까? localgit ignore에 대해 언급 한 단계를 수행 하고 시스템을 다시 시작 했는데 여전히 직접 작업하는 것으로 표시됩니다.
Vivek Vardhan

1
유용한 update-index트릭에 감사합니다. .gitignore파일 변경을 피하기 위해 절대적으로 완벽 하며 Git에서 추적합니다!
Thomas P.

@mcbjam 특별한 git ignore 명령이 없습니다. 작업 사본 내 적절한 위치에있는 .gitignore 파일을 편집하십시오. 그런 다음이 .gitignore를 추가하고 커밋해야합니다. 해당 리포지를 복제하는 모든 사람은 해당 파일을 무시합니다.
Xman Classical

@Vivek Vardhan git update-index --assume-unchanged는 인덱스의 임시 마스크와 같습니다. 전원을 끄기 전까지는 그대로 유지됩니다. 내 요점을 좀 더 명확하게하기 위해, 인덱스는 처음에 (git read-tree 직후) 트리에서 읽은 모든 파일을 "포함한다". 인덱스 항목은 실제로 제거하는 것과 같지 않습니다.
Xman Classical 2019

150

gitignore에 다음 줄을 추가하십시오.

/Hello.class

이것은 git에서 Hello.class를 제외시킵니다. 이미 커밋 한 경우 다음 명령을 실행하십시오.

git rm Hello.class

git에서 모든 클래스 파일을 제외하려면 .gitignore에 다음 줄을 추가하십시오.

*.class

32
추가 Hello.class하려면 .gitignore라는 모든 파일 무시 Hello.class어떤 하위 디렉토리에 있습니다. 파일 Hello.class과 동일한 디렉토리에 있는 파일 만 무시하려면 대신 .gitignore/Hello.class줄을 사용하십시오.
ndim

.gitignore파일을 어디에 넣 습니까?
CodyBugstein

6
@Imray .gitignoregit 프로젝트의 어느 곳에 나 넣을 수 있습니다 -경로가로 시작 /하면 .gitignore파일 의 위치와 관련이 있습니다. 그렇지 않으면 현재 디렉토리와 그 하위 디렉토리의 파일을 재귀 적으로 참조합니다.
Armand

109

1) .gitignore파일을 작성 하십시오. 이렇게하려면 .txt파일을 만들고 확장자를 다음과 같이 변경하면됩니다.

여기에 이미지 설명을 입력하십시오

그런 다음 cmd 창에 다음 줄을 작성하여 이름을 변경해야합니다.

 rename git.txt .gitignore

git.txt방금 만든 파일의 이름은 어디에 있습니까 ?

그런 다음 파일을 열고 리포지토리에 추가하지 않으려는 모든 파일을 쓸 수 있습니다. 예를 들어, 다음과 같습니다.

#OS junk files
[Tt]humbs.db
*.DS_Store

#Visual Studio files
*.[Oo]bj
*.user
*.aps
*.pch
*.vspscc
*.vssscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.[Cc]ache
*.ilk
*.log
*.lib
*.sbr
*.sdf
*.pyc
*.xml
ipch/
obj/
[Bb]in
[Dd]ebug*/
[Rr]elease*/
Ankh.NoLoad

#Tooling
_ReSharper*/
*.resharper
[Tt]est[Rr]esult*

#Project files
[Bb]uild/

#Subversion files
.svn

# Office Temp Files
~$*

이 작업이 끝나면 Git 리포지토리에 추가해야합니다. 저장소가있는 파일을 저장해야합니다.

그런 다음 Git Bash에서 다음 줄을 작성해야합니다.

git config --global core.excludesfile ~/.gitignore_global

저장소가 이미 존재하면 다음을 수행해야합니다.

  1. git rm -r --cached .
  2. git add .
  3. git commit -m ".gitignore is now working"

2 단계가 작동하지 않으면 추가 할 파일의 전체 경로를 작성해야합니다.


프롬프트에서 "copy con .gitignore"명령을 사용한 다음 Ctrl + Z를 눌러 Windows 탐색기없이 파일을 직접 만들 수 있습니다.
heringer

61

무시하려면 :

git update-index --assume-unchanged <path/to/file>

무시를 취소하려면

git update-index --no-assume-unchanged <path/to/file>

6
이 문제에 대한 해결책으로 차트의 최상위에 오르고 싶습니다. ... 매우 간단하고 우아합니다
user1457958

"매우 단순하고 우아하다"- 실제로 는 아닙니다. "파일 시스템 작업이 느리다는 것을 알고 있습니다. Git에 이러한 경로를 변경 하지 않겠다고 약속 할 것 입니다 ..."특히 Git이 경로를 결정할 수없는 경우 Git이 항상 이러한 경로를 수정하지 않은 것으로 간주한다는 약속 은 아닙니다 . … 추가 lstat(2)비용 을 들이지 않고 변경 되었으며 경로 수정 되었다고 보고 할 권리 git commit -a가 있습니다.
Chris

47

추적 된 파일에서 변경 사항을 무시 / 무시하는 데 아래 방법을 사용할 수 있습니다.

  1. 무시하는 경우 : git update-index --assume-unchanged <file>
  2. 무시 된 파일을 되돌리려면 : git update-index --no-assume-unchanged <file>

4
모든 파일에 적용됩니까 ? 이러한 명령을 단일 파일에만 적용하여 무시 / 무시하는 방법은 확실하지 않습니다.
javadba

@kapil 마침내! 실제로 1 조 git 명령 변형 중에서 작동하는 것! 모든 빌드 후에도 계속 나타나는 어리석은 build.xml 파일을 무시하기 위해 모든 답변을 시도했습니다 ... 감사합니다!
killjoy

1
하지 마십시오 : '가정 - 변경을 위해 남용되어서는 안 메커니즘을 무시합니다. "파일 시스템 작업이 느리다는 것을 알고 있습니다. Git에 이러한 경로를 변경 하지 않겠다고 약속 할 것 입니다 ..."특히 Git이 경로를 결정할 수없는 경우 Git이 항상 이러한 경로를 수정하지 않은 것으로 간주한다는 약속 은 아닙니다 . … 추가 lstat(2)비용 을 들이지 않고 변경 되었으며 경로 수정 되었다고 보고 할 권리 git commit -a가 있습니다.
Chris

22

.gitignore.git이있는 디렉토리에를 작성하십시오 . 줄 바꿈으로 구분하여 파일을 나열 할 수 있습니다. 와일드 카드를 사용할 수도 있습니다.

*.o
.*.swp

3
도구 별 패턴 (예 : 임시 Vim 파일)을 .gitignore파일에 넣지 않는 것이 좋습니다 (도구가 프로젝트에서 명령하지 않는 한). 사용자 별 제외 파일에 즐겨 사용하는 도구에 대한 패턴을 넣을 수 있습니다 (set core.excludesFile). 그들은 모든 저장소에서 작동합니다. 예를 들어 git config --global core.excludesFile "$HOME/.git-user-excludes", 해당 파일에 넣습니다.
Chris Johnsen

@Chris : 팁 주셔서 감사합니다. 그러나 나는 더 나은 아무것도 내 마음에 오지 않았기 때문에 거기에 썼다 :)
terminus

1
@ChrisJohnsen '도구 별'? vim ?? vim 스왑 파일을 제외하는 것이 안전하다고 생각합니다.
javadba

16

공식 GitHub 사이트에서 :

파일이 이미 체크인되어 있고 무시하려는 경우 나중에 규칙을 추가해도 Git은 파일을 무시하지 않습니다. 이 경우 터미널에서 다음 명령을 실행하여 파일을 먼저 추적 해제해야합니다.

git rm --cached FILENAME

또는

git rm --cached .

12

당신은 같은 것을 작성해야합니다

*.class

당신에 .gitignore파일.


4
@AgentZebra git로 끝나는 모든 파일을 무시하도록 항목 *.class을 추가해야합니다 . .gitignore.class
KingCrunch

7

무시할 파일을 파일에 추가하십시오 .gitignore.

*.수업

*. 프로젝트

* .prefs

*.계획



5

파일을 이미 커밋하고 파일에 추가하여 .gitignore파일 을 무시하려고하면 Git은이를 무시하지 않습니다. 이를 위해서는 먼저 다음을 수행해야합니다.

git rm --cached FILENAME

프로젝트를 새로 시작하고 Git ignore에 일부 파일을 추가하려는 경우 아래 단계에 따라 Git ignore 파일을 작성하십시오.

  1. Git 저장소로 이동하십시오.
  2. "touch .gitignore"를 입력하면 .gitignore파일 이 생성 됩니다.

3

.gitignore 대신 .gitattributes를 사용하여 전체 파일 형식을 제외 할 수도 있습니다. 파일은 설명이 필요 없지만 여기에 내용을 붙여 넣었습니다. 마지막 줄 (* .class binary)에주의하십시오.

# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
*.gif binary
*.ico binary
*.mo binary
*.pdf binary
*.phar binary
*.class binary

2

.git / info / exclude에 다음 줄을 추가하십시오 :
Hello.class


폴더 안의 파일을 변경 .git하시겠습니까?
피터 Mortensen

아마도 .git 아래의 파일을 수동으로 터치하는 것은 좋지 않습니다.
mgyky

2

"dump.rdb"파일과 비슷한 문제가있었습니다.
이 파일을 다양한 방법으로 .gitignore 파일에 추가하려고 시도했지만 한 가지 방법 만 작동했습니다.

.gitignore 파일의 끝에 파일 이름을 추가하십시오

참고 : 다른 곳에 파일을 추가해도 작동하지 않았습니다.

예를 들어 https://gitlab.com/gitlab-org/gitlab-ce/raw/b3ad3f202478dd88a3cfe4461703bc3df1019f90/.gitignore를 참조하십시오.


2

이 웹 페이지 는로 작업 할 때 유용하고 시간을 절약 할 수 있습니다 .gitignore.

일반적으로 Git 리포지토리로 가져 오지 않으려는 특정 파일 / 폴더 (예 : IDE 관련 폴더 및 구성 파일)를 사용하여 다른 IDE 및 운영 체제에 대한 .gitignore 파일을 자동으로 생성합니다.


1

나는 이것을 시도했다-

  1. 무시하고 싶은 파일 목록

git status .idea/xyz.xml .idea/pqr.iml Output .DS_Store

  1. 1 단계의 내용을 복사하여 .gitignore 파일에 추가하십시오.

echo " .idea/xyz.xml .idea/pqr.iml Output .DS_Store" >> .gitignore

  1. 확인

git status .gitignore

마찬가지로 우리는 디렉토리와 git 상태에서 무시하려는 모든 하위 디렉토리 / 파일을 추가 할 수 있으며 디렉토리 directoryname/*에서이 명령을 실행했습니다 src.


1
  1. .gitignore 파일로 이동하여 무시하려는 파일의 항목을 추가하십시오.
  2. 운영 git rm -r --cached .
  3. 이제 실행 git add .

0

나는 --assume-unchanged또한 시도 .gitignore했지만 둘 다 잘 작동하지 않았습니다. 그들은 분기를 전환하기 어렵고 다른 사람의 변경 사항을 병합하기가 어렵습니다. 이것은 내 솔루션입니다.

커밋 할 때 변경 목록에서 파일을 수동으로 제거합니다.

내가 전에 당겨 , 내가 숨겨 놓은 변경된 파일을. 그리고 당기고 난 후에, 나는 숨쉬는 팝을 합니다.

  1. 자식 숨김
  2. 자식 풀
  3. 자식 숨김 팝

3 단계는 때때로 병합을 트리거하고 해결해야 할 충돌을 일으킬 수 있으며 이는 좋은 일입니다.

이를 통해 팀의 다른 사람들과 공유하지 않은 로컬 변경 사항을 유지할 수 있습니다.

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