이미 많은 파일을 추적하는 기존 저장소에 .gitignore를 적용하십시오.


314

내 저장소에 기존 Visual Studio 프로젝트가 있습니다. 최근에 프로젝트에 .gitignore 파일을 추가했으며 파일에 나열된 파일을 무시하도록 Git에 지시한다고 가정합니다.

내 문제는 모든 파일을 이미 추적하고 있으며 Git 은이 파일에 규칙을 추가하여 무시하기 전에 이미 추적 된 파일을 무시하지 않는다는 것입니다.

사용하는 것이 좋습니다 : git rm --cached수동으로 추적을 해제하십시오.하지만 하나씩 통과하는 데 영원히 걸릴 것입니다.

리포지토리를 삭제하고 다시 만드는 것에 대해 생각했지만 이번에는 .gitignore 파일이 있지만 더 좋은 방법이 있어야합니다.


1
도움이된다면 옵션으로 git rm --cached전체 디렉토리를 만들 수 있습니다.-r
Nathan Wallace



답변:


870

답변은 내 문제를 해결했습니다.

우선, 보류중인 모든 변경 사항을 커밋하십시오.

그런 다음이 명령을 실행하십시오.

git rm -r --cached .

이렇게하면 인덱스에서 모든 것을 제거한 다음 다음을 실행하십시오.

git add .

커밋 :

git commit -m ".gitignore is now working"

9
완벽한 답변! git push origin원격 저장소의 변경 사항을 반영하기 위해 추가하십시오 .
Sanket Berde

8
나는이 답변을 사용하기 시작했고 ... 프로젝트의 거의 모든 것을 삭제했습니다! 분명히 나는 ​​뭔가 잘못하고 있었다. 그러나 나는이 제안을 우연히 따르지 말라고 사람들에게 경고하고 싶다.
Mark Olbert

4
합니까 제거하고 다시는-추가 할 때 파일에 대한 역사를 잃는이를
아란 멀홀랜드을

10
.gitignore is now working메시지를 사용하는 커밋이 얼마나 많은지 궁금합니다 . :)
ihavenoidea 2016 년

1
이 방법은 저에게 효과적이었습니다. gitignore 파일을 만들고 전체 디렉토리를 무시한 다음 gitignore 작성의 변경 사항을 커밋했습니다. 그런 다음 위의 세 가지 명령을 정확하게 수행했습니다. 완벽하게 작동했지만 위에서 언급 한대로 먼저 "대기중인 모든 변경 사항을 커밋"해야합니다.
Erich Meissner

61
  1. .gitignore 파일을 만들려면 빈 .txt 파일을 만들면됩니다.

  2. 그런 다음 cmd에 다음 줄을 작성하여 이름을 변경해야합니다 (여기서 git.txt방금 만든 파일 이름).

    rename git.txt .gitignore

  3. 그런 다음 파일을 열고 무시하려는 모든 추적되지 않은 파일을 쓸 수 있습니다. 예를 들어, 다음과 같습니다.

```

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
~$*

있다 GitHub의에 의해 유용 .gitignore 파일의 전체 컬렉션

  1. 이 파일을 얻으면 다른 파일과 마찬가지로 git 저장소에 파일을 추가해야하며 저장소의 루트에만 있어야합니다.

  2. 그런 다음 터미널에서 다음 줄을 작성해야합니다.

    git config --global core.excludes 파일 ~ / .gitignore_global

oficial doc에서 :

컴퓨터의 모든 Git 리포지토리에서 파일을 무시하기위한 규칙 목록 인 전역 .gitignore 파일을 만들 수도 있습니다. 예를 들어 ~ / .gitignore_global에 파일을 생성하고 규칙을 추가 할 수 있습니다.

터미널을 엽니 다. 터미널에서 다음 명령을 실행하십시오 : git config --global core.excludesfile ~ / .gitignore_global

리포지토리가 이미 존재하면 다음 명령을 실행해야합니다.

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

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


4
@Karen_Wiznia "git config ... _global"은 컴퓨터의 모든 Git 저장소에 대한 전역 gitingore를 만듭니다. OP는 그렇게하고 싶지 않았다.
ivan7707

나는 이것을 두 번 이상 좋아할 수 있기를 바랍니다. 나는 계속해서이 알림을 구하는이 질문으로 돌아옵니다.
Antony D' Andrea

1
"이름 바꾸기 git.txt .gitignore"대신 "mv git.txt .gitignore"여야합니다.
Ahmad F

30

여기에 지정된대로 색인을 업데이트 할 수 있습니다.

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

이렇게하면 파일이 git status또는에 표시되지 않습니다 git diff.

파일 추적을 다시 시작하려면 다음을 실행하십시오.

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

5
이것은 더 나은 대답입니다. 리포지토리에서 추적하지 않으려는 파일 인 단일 파일에만 중점을 둡니다. 가장 높은 답변은 잘 작동하지만 git이 추적하는 파일을 무시하는 것 이상을 수행합니다.
Chris Mejka

1
이것은 좋은 것입니다. 그러나 우리가 당기면 어떨까요? 병합 충돌이 있습니까?
pramod

@ pramod, 좋은 질문입니다. 확실하지 않습니다. 제거 된 테스트 저장소에서 사용해보십시오.
Patrick James McDougle

15

.gitignore너무 늦게 추가하면 git은 이미 커밋 된 파일을 계속 추적합니다. 이 문제를 해결하기 위해 원치 않는 파일의 캐시 된 모든 인스턴스를 항상 제거 할 수 있습니다.

먼저 실제로 추적중인 파일을 확인하려면 다음을 실행하십시오.

git ls-tree --name-only --full-tree -r HEAD

디렉토리에서 원치 않는 파일을 발견했다고 가정하면 cache/모든 파일 대신 해당 디렉토리를 대상으로하는 것이 더 안전합니다.

따라서 대신 :

git rm -r --cached .

원하지 않는 파일이나 디렉토리를 대상으로하는 것이 더 안전합니다.

git rm -r --cached cache/

그런 다음 모든 변경 사항을 추가하십시오.

git add .

커밋 ...

git commit -m ".gitignore is now working"

참조 : https://amyetheredge.com/code/13.html


전체 리포지토리가 아닌 몇 개의 파일 만 제거하려는 경우이 방법이 가장 좋습니다. 나는 당신에게 내 엄지 손가락을 포기합니다.
Apuig

2

다음은 현재 제외 패턴 세트에서 무시되는 파일을 "추적 해제"하는 한 가지 방법입니다.

(GIT_INDEX_FILE=some-non-existent-file \
git ls-files --exclude-standard --others --directory --ignored -z) |
xargs -0 git rm --cached -r --ignore-unmatch --

그러면 파일이 작업 디렉토리에 남지만 색인에서 제거됩니다.

여기서 사용되는 트릭은 존재하지 않는 인덱스 파일을 git ls-files에 제공하여 추적 된 파일이 없다고 생각하는 것입니다. 위의 쉘 코드는 색인이 비어 있으면 무시 될 모든 파일을 요청한 다음 git rm을 사용하여 실제 색인에서 제거합니다.

파일이 "추적되지 않은"후에는 git status를 사용하여 중요한 항목이 제거되지 않았는지 확인하십시오 (그렇다면 제외 패턴을 조정하고 git reset-path를 사용하여 제거 된 색인 항목을 복원하십시오). 그런 다음“크루 드”를 제거하는 새로운 커밋을 만드십시오.

“크루 드”는 여전히 오래된 커밋에 있습니다. 정말로 깨끗한 기록이 필요한 경우 git filter-branch를 사용하여 이전 커밋의 깨끗한 버전을 생성 할 수 있습니다 (git filter-branch를 사용하면 "히스토리를 다시 작성합니다". “crud”가 처음 소개 된 이후의 모든 역사적 커밋.


견고한 솔루션처럼 들립니다 :) 이것이 Linux 쉘 용이라고 생각합니다. 불행히도 나는 Win7 사용자입니다. 내가 창문에서 이것을 할 수있는 방법은 무엇입니까?
Tohid

0

준비 영역에서 파일 제거

git reset HEAD .

모든 변경 사항 추가

git add .

커밋 :

git commit -m ".gitignore is now working"

-1

이것이 기존 저장소에 .gitignore 파일을 추가하는 쉬운 방법이라고 생각 합니다.

전제 조건 :

github 계정에 액세스하려면 브라우저가 필요합니다.

단계

  1. 필수 (기존) 프로젝트에서 새 파일을 작성하고 이름을 .gitignore로 지정하십시오 . 당신은 즉시로 파일 이름뿐만 .gitignore 템플릿에 대한 프롬프트 암시 얻을 것이다 .gitignore를 . 이 템플릿을 사용하거나 gitignore.io 를 사용 하여 gitignore 파일 의 내용을 생성 하십시오.
  2. 변경 사항을 적용하십시오.
  3. 이제이 저장소를 복제하십시오.

즐기세요!


-3

사용 git clean
이 실행에 도움 받기

git clean -h

먼저 어떤 일이 발생하는지 확인하려면 드라 이런을 위해 -n 스위치를 전달하십시오.

git clean -xn

gigitnored 쓰레기를 제거하려면

git clean -xdf

주의 : database.yml과 같은 로컬 구성 파일은 무시해도됩니다. 자신의 책임하에 사용하십시오.

그때

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