etc./StackOverFlow

이미 Git 저장소에 커밋된 파일 무시 [중복]

청렴결백한 만능 재주꾼 2021. 11. 9. 00:28
반응형

질문자 :trobrock


.gitignore 파일을 추가한 이미 초기화된 Git 리포지토리가 있습니다. 무시하려는 파일이 무시되도록 파일 인덱스를 새로 고치려면 어떻게 해야 합니까?



저장소에 이미 추가/초기화된 단일 파일을 추적 해제하려면, 즉 파일 추적을 중지하지만 시스템에서 삭제하지 않으려면 다음을 사용하십시오. git rm --cached filename

.gitignore 있는 모든 파일을 추적 해제하려면 다음을 수행하십시오.

먼저 미해결 코드 변경 사항을 커밋 하고 다음 명령을 실행합니다.

 git rm -r --cached .

이렇게 하면 인덱스 (스테이징 영역)에서 변경된 파일이 제거되고 다음을 실행합니다.

 git add .

커밋:

 git commit -m ".gitignore is now working"

git rm --cached filename 을 실행 취소하려면 git add filename 합니다.

git add . 를 실행하기 전에 중요한 변경 사항을 모두 커밋해야 합니다. 그렇지 않으면 다른 파일에 대한 변경 사항을 잃게 됩니다.


Community Wiki

리포지토리에서 이미 추적된 파일(예: 로컬 환경에 대해 변경해야 하지만 이러한 변경 사항을 체크인하고 싶지 않은 dev.properties 파일)에 대한 변경 사항을 원하는 것보다 무시하려는 경우 이다:

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

변경 사항 추적을 다시 시작하려면

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

git-update-index(1) 매뉴얼 페이지를 참조하십시오.

또한 git-reset을 통해 유지하기 위해 이것이 필요한 경우 update-index skip-worktreeno-skip-worktree 옵션을 살펴보십시오.


업데이트: 사람들이 요청했기 때문에 로컬 작업 공간에서 현재 "무시"(--assume-unchanged)된 파일을 확인하기 위한 편리한(그리고 아래에 설명된 이후 업데이트된) 별칭이 있습니다.

 $ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"

dyodji

저장소에 이미 추가/초기화된 파일을 추적 해제하려면, 즉 파일 추적을 중지하지만 시스템에서 삭제하지 않으려면 다음을 사용하십시오. git rm --cached filename


pagetribe

예 - .gitignore 시스템은 현재 git에서 버전 제어를 받고 있지 않은 파일만 무시합니다.

git-add 사용하여 test.txt 라는 파일을 이미 추가한 경우 .gitignore test.txt 를 추가하면 여전히 test.txt 변경 사항이 추적됩니다.

git rm test.txt 를 실행하고 해당 변경 사항을 커밋해야 합니다. test.txt 변경 사항이 무시됩니다.


Antony Stubbs

.gitignore에서 후행 공백 제거

또한 .gitignore에 후행 공백이 없는지 확인하십시오. 나는 답을 찾고 있었기 때문에 이 질문을 하게 되었고, .gitignore를 잡는 대신 편집기를 열어야 한다는 우스꽝스러운 느낌이 들었습니다. 끝에서 하나의 여분의 공간을 제거하고 지금 작동 :)


MikeJansen

나는 이 단계를 따랐다

 git rm -r --cached . git add . git reset HEAD

그 후 git은 무시해야 하는 모든 파일(제 경우에는 *.swp)을 삭제합니다.


Orlando

로컬 시스템에서 파일을 삭제하지 않고 추적 파일을 중지하려면 config/database.yml 파일을 무시하는 것이 좋습니다. 다음을 시도하십시오.

 git rm --cached config/database.yml # this will delete your file from git history but not from your local system.

이제 이 파일을 .gitignore 파일에 추가하고 변경 사항을 커밋합니다. 그리고 이제부터 config/database.yml에 대한 변경 사항은 git에서 추적되지 않습니다.

 $ echo config/database.yml >> .gitignore

감사 해요


przbadu

어디서나 복잡한 답변!

다음을 사용하십시오.

 git rm -r --cached .

무시하려는 파일을 컴퓨터의 마스터가 아닌 원본에서 제거합니다!

그 후에 커밋하고 푸시하십시오!


Ahmad Awais

추적에서 특정 파일 몇 개만 제거하려면:

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

추적을 다시 시작하려면:

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

Mark Salvatore

dav_i가 말했듯이 파일을 repo에 유지하면서 추가 커밋을 생성하지 않고 변경 사항에서 파일을 제거하려면 다음을 사용할 수 있습니다.

 git update-index --assume-unchanged filename

Iman Mohamadi

'대답' 명령이 무엇을 했는지 잘 몰라서 실행했는데 많이 실망했습니다. git repo에서 모든 파일을 재귀적으로 제거합니다.

Stackoverflow를 구출하기 위해 ... "git rm -r ."을 되돌리는 방법은 무엇입니까?

 git reset HEAD

덮어 쓰고 싶지 않은 커밋되지 않은 로컬 파일이 있었기 때문에 트릭을 수행했습니다.


averydev

저와 같은 느린 사람들을 위한 또 다른 제안이 있습니다 =) .gitignore 파일을 .git 폴더가 아닌 저장소 루트에 넣습니다. 건배!


Olga

어떤 대답도 나를 위해 일하지 않았습니다.

대신에:

  1. git 제어 디렉토리 밖으로 파일 이동
  2. git에서 제거 확인
  3. 파일을 git 제어 디렉토리로 다시 이동

파일을 다시 이동한 후 git은 이를 무시합니다.

디렉토리에서도 작동합니다!


Hunter S

파일이 이미 버전 관리에 있는 경우 수동으로 제거해야 합니다.


Aragorn

내가 가진 또 다른 문제는 인라인 댓글을 달았다는 것입니다.

 tmp/* # ignore my tmp folder (this doesn't work)

이것은 작동합니다

 # ignore my tmp folder tmp/

kindahero

귀하의 답변 덕분에 이를 개선하기 위해 이 작은 한 줄짜리 글을 작성할 수 있었습니다. 내 .gitignore 및 repo에서 실행했는데 문제가 없었지만 눈에 띄는 문제가 있는 경우 의견을 보내주십시오. .gitignore 에서 git rm -r --cached 해야 합니다.

 cat $(git rev-parse --show-toplevel)/.gitIgnore | sed "s/\/$//" | grep -v "^#" | xargs -L 1 -I {} find $(git rev-parse --show-toplevel) -name "{}" | xargs -L 1 git rm -r --cached

fatal: pathspec '<pathspec>' did not match any files . 수정되지 않은 파일에 한합니다.


umop

.gitignore에서 이상한 문제를 발견했습니다. 모든 것이 제자리에 있었고 정확해 보였습니다. 내 .gitignore가 "무시"된 유일한 이유는 줄 끝이 Mac 형식(\r)이기 때문입니다. 따라서 올바른 줄 끝으로 파일을 저장한 후(vi에서 :set ff=unix 사용) 모든 것이 매력처럼 작동했습니다!


Johannes Vetter

여기에 언급되지 않은 또 다른 문제는 Windows 메모장에서 .gitignore를 만든 경우 내가 알아낸 것처럼 다른 플랫폼에서 횡설수설하게 보일 수 있다는 것입니다. 핵심은 인코딩이 메모장에서 ANSI로 설정되어 있는지 확인하는 것입니다(또는 내가 한 것처럼 Linux에서 파일을 만듭니다).

여기 내 대답에서 : https://stackoverflow.com/a/11451916/406592


Matt Parkins

내 서버 Linux 서버(내 로컬 dev mac에서는 사실이 아님)에서 별표를 추가하지 않는 한 디렉토리는 무시됩니다.

www/archives/*

이유는 모르겠지만 몇 시간 동안 느슨해져서 공유하고 싶었습니다.


ndemoreau

무시된 많은 파일 추적을 중지해야 하는 경우 몇 가지 명령을 결합할 수 있습니다.

git ls-files -i --exclude-standard | xargs -L1 git rm --cached

이렇게 하면 무시된 파일 추적이 중지됩니다. 실제로 파일 시스템에서 파일을 제거하려면 --cached 옵션을 사용하지 마십시오. 다음과 같이 폴더를 지정하여 검색을 제한할 수도 있습니다.

git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm


Etherealone

.gitignore 가 추적되지 않은 파일을 무시하는 것 같지 않은 경우에도 염두에 두어야 할 한 가지는 무시와 같은 줄에 주석이 없어야 한다는 것입니다. 그래서 이것은 괜찮습니다.

 # ignore all foo.txt, foo.markdown, foo.dat, etc. foo*

그러나 이것은 작동하지 않습니다:

 foo* # ignore all foo.txt, foo.markdown, foo.dat, etc.

.gitignore "foo* # ignore all foo.txt, foo.markdown, foo.dat, etc." 라는 이름의 파일을 무시합니다."로 해석합니다.


Gabriel Perdue

출처 : http:www.stackoverflow.com/questions/1139762/ignore-files-that-have-already-been-committed-to-a-git-repository

반응형