etc./StackOverFlow

추적했지만 현재 .gitignore에 있는 파일을 Git에서 "잊게" 하려면 어떻게 해야 합니까?

청렴결백한 만능 재주꾼 2021. 9. 23. 22:52
반응형

질문자 :Ivan


Git에서 추적하던 파일이 있지만 이제 파일이 .gitignore 목록에 있습니다.

그러나 해당 파일은 편집된 후에도 git status Git이 그것에 대해 완전히 잊도록 어떻게 강제합니까?



답변자 : CB Bailey


.gitignore 는 추적되지 않은 파일이 Git에서 추적하는 파일 세트에 추가되는 것을 방지합니다( add -f 하지 않음). 그러나 Git은 이미 추적 중인 모든 파일을 계속 추적합니다.

파일 추적을 중지하려면 색인에서 파일을 제거해야 합니다. 이것은 이 명령으로 달성할 수 있습니다.

 git rm --cached <file>

전체 폴더를 제거하려면 그 안에 있는 모든 파일을 재귀적으로 제거해야 합니다.

 git rm -r --cached <folder>

헤드 개정판에서 파일 제거는 다음 커밋에서 발생합니다.

경고: 이렇게 하면 로컬에서 실제 파일이 제거되지 않지만 다음 git pull 다른 개발자 컴퓨터에서 파일이 제거됩니다.



답변자 : Matt Frear


아래의 일련의 명령은 Git 인덱스(작업 디렉터리 또는 로컬 저장소가 아님)에서 모든 항목을 제거한 다음 Git을 무시하면서 Git 인덱스를 업데이트합니다. 추신. 인덱스 = 캐시

첫 번째:

 git rm -r --cached . git add .

그 다음에:

 git commit -am "Remove ignored files"

또는 한 줄로:

 git rm -r --cached . && git add . && git commit -am "Remove ignored files"


답변자 : Konstantin


git update-index 가 나를 위해 일을 수행합니다.

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

참고: 이 솔루션은 실제로 .gitignore 독립적입니다. gitignore는 추적되지 않은 파일에만 적용되기 때문입니다.


업데이트, 더 나은 옵션

이 답변이 게시된 이후로 새 옵션이 생성되었으며 선호되어야 합니다. 사용자가 더 이상 커밋하고 싶지 않은 수정된 추적 파일을 위한 --skip-worktree 를 사용해야 하며 git이 큰 추적 파일의 상태를 확인하지 못하도록 성능을 위해 --assume-unchanged 자세한 내용은 https://stackoverflow.com/a/13631525/717372 를 참조하세요...

 git update-index --skip-worktree <file>

취소하려면

 git update-index --no-skip-worktree <file>


답변자 : thSoft


git ls-files --ignored --exclude-standard -z | xargs -0 git rm --cached git commit -am "Remove ignored files"

무시된 파일 목록을 가져와서 인덱스에서 제거하고 변경 사항을 커밋합니다.



답변자 : David Hernandez


나는 항상 이 명령을 사용하여 추적되지 않은 파일을 제거합니다. 한 줄, Unix 스타일의 깔끔한 출력:

 git ls-files --ignored --exclude-standard | sed 's/.*/"&"/' | xargs git rm -r --cached

무시된 모든 파일을 나열하고, 내부에 공백이 있는 경로를 처리하기 위해 모든 출력 줄을 따옴표로 묶은 줄로 바꾸고, 모든 것을 git rm -r --cached 에 전달하여 인덱스에서 경로/파일/디렉토리를 제거합니다.



답변자 : Joel Hooks


그것을 밖으로 옮기고 커밋한 다음 다시 안으로 옮기십시오.

이것은 과거에 나를 위해 일했지만 아마도 이것을 달성하기 위한 'gittier' 방법이 있을 것입니다.



답변자 : Dheeraj Bhaskar


다음과 같은 경우에 사용하십시오.

  1. 많은 파일을 추적 해제하고 싶거나
  2. .gitignore 파일을 업데이트 했습니다.

출처: .gitignore를 기반으로 Git 리포지토리에 이미 추가된 파일 추적 해제

이미 Git 저장소에 일부 파일을 추가/커밋한 다음 .gitignore 파일에 추가했다고 가정해 보겠습니다. 이 파일은 리포지토리 인덱스에 계속 존재합니다. 이 기사에서는 그것들을 제거하는 방법을 볼 것입니다.

1단계: 모든 변경 사항 커밋

계속하기 전에 .gitignore 파일을 포함하여 모든 변경 사항이 커밋되었는지 확인하십시오.

2단계: 저장소에서 모든 항목 제거

저장소를 지우려면 다음을 사용하십시오.

 git rm -r --cached .
  • rm 은 제거 명령입니다.
  • -r 재귀 제거를 허용합니다
  • –cached 는 인덱스에서 파일만 제거합니다. 파일은 여전히 존재합니다.

rm 명령은 용서할 수 없습니다. 사전에 수행하려는 작업을 수행하려면 -n 또는 --dry-run 플래그를 추가하여 테스트하십시오.

3단계: 모두 읽기

 git add .

4단계: 커밋

 git commit -m ".gitignore fix"

저장소가 깨끗합니다 :)

변경 사항을 리모컨으로 푸시하여 변경 사항이 적용된 곳에서도 확인하십시오.



답변자 : Seth Robertson


만약 당신이 할 수없는 git rm 다른 사람들이 (당신이 경우에도 경고를해야 할 수도 있기 때문에 파일을 추적 git rm --cached 다른 사람이 변화를 얻을 때, 자신의 파일은 그 파일 시스템에서 삭제됩니다). 이는 종종 구성 파일 재정의, 인증 자격 증명 등으로 인해 수행됩니다. 사람들이 이 문제를 해결한 방법 에 대해서는 https://gist.github.com/1423106을 참조하십시오.

요약:

  • 응용 프로그램에서 무시된 파일 config-overide.ini를 찾아 커밋된 파일 config.ini 위에 사용하도록 합니다(또는 ~/.config/myapp.ini 또는 $MYCONFIGFILE을 찾습니다).
  • config-sample.ini 파일을 커밋하고 config.ini 파일을 무시하고, 필요한 경우 스크립트 또는 유사한 파일을 복사하도록 합니다.
  • 변경 사항을 적용 및 제거하기 위해 gitattributes clean/smudge 마법을 사용해 보십시오. 예를 들어 구성 파일을 대체 분기의 체크아웃으로 얼룩지게 하고 구성 파일을 HEAD의 체크아웃으로 정리합니다. 이것은 까다로운 항목이므로 초보자에게는 권장하지 않습니다.
  • 마스터에 병합되지 않는 전용 배포 분기에 구성 파일을 보관하십시오. 배포/컴파일/테스트하려는 경우 해당 분기에 병합하고 해당 파일을 가져옵니다. 이것은 인간 병합 정책과 extra-git 모듈을 사용하는 것을 제외하고 본질적으로 얼룩/깨끗한 접근 방식입니다.
  • 추천 금지: 가정 변경을 사용하지 마십시오. 눈물로 끝날 것입니다(git 자체에 거짓말을 하면 변경 사항이 영원히 손실되는 것과 같은 나쁜 일이 발생할 수 있기 때문입니다).


답변자 : drrlvn


git filter-branch 를 사용하여 이 작업을 수행했습니다. 내가 사용한 정확한 명령은 매뉴얼 페이지에서 가져왔습니다.

경고 : 전체 기록에서 파일이 삭제됩니다.

 git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD

이 명령은 전체 커밋 기록을 다시 만들고 git rm 실행하여 지정된 파일을 제거합니다. 분실되는 바와 같이, 명령을 실행하기 전에 백업하는 것을 잊지 마십시오.



답변자 : JonBrave


나에게 효과가 없었던 것은

(Linux에서) ls-files --ignored --exclude-standard | xargs git rm -r --cached 접근 방식. 그러나 제거할 파일(일부)에는 \n 되어 있습니다. 두 가지 솔루션 모두:

 git ls-files --ignored --exclude-standard | xargs -d"\n" git rm --cached git ls-files --ignored --exclude-standard | sed 's/.*/"&"/' | xargs git rm -r --cached

이 상황에 대처하십시오(찾을 수 없는 파일에 대한 오류 발생).

그래서 나는 제안한다

 git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cached git commit -am "Remove ignored files"

이것은 ls-files에 -z 인수와 xargs -0 인수를 사용하여 파일 이름의 "불쾌한" 문자를 안전하고 올바르게 처리합니다.

매뉴얼 페이지 git-ls-files(1) 에는 다음과 같이 명시되어 있습니다.

-z 옵션을 사용하지 않는 경우, 경로명의 TAB, LF, 백슬래시 문자는 각각 \t, \n, \\로 표현된다.

따라서 파일 이름에 이러한 문자가 포함되어 있으면 내 솔루션이 필요하다고 생각합니다.



답변자 : Chen_Wayne


  1. .gitignore 파일을 업데이트합니다. 예를 들어, 추적하지 않으려는 폴더를 .gitignore 합니다.

  2. git rm -r --cached . – 원하는 파일과 원하지 않는 파일을 포함하여 추적된 모든 파일을 제거합니다. 코드는 로컬에 저장한 한 안전합니다.

  3. git add . .gitignore 파일을 제외한 모든 파일이 다시 추가됩니다.


우리를 올바른 방향으로 안내해 준 @AkiraYamamoto에게 모자 팁.



답변자 : Shamsul Arefin Sajib


다음 단계를 순차적으로 수행하면 문제가 없을 것입니다.

  1. directory/storage 에서 실수로 추가한 파일 을 제거하십시오 . "rm -r"(Linux의 경우) 명령을 사용하거나 디렉토리를 검색하여 삭제할 수 있습니다. 또는 PC의 다른 위치로 이동합니다. (이동/제거를 위해 실행 중인 경우 IDE를 닫아야 할 수도 있습니다.)

  2. 지금 .gitignore 파일에 파일/디렉토리를 추가하고 저장합니다.

  3. 이제 다음 명령을 사용하여 Git 캐시 에서 제거 합니다(둘 이상의 디렉터리가 있는 경우 이 명령을 반복적으로 실행하여 하나씩 제거).

     git rm -r --cached path-to-those-files
  4. 지금은 커밋하고 다음 명령을 사용하여 푸시 않습니다. 이렇게 하면 Git 원격에서 해당 파일 이 제거되고 Git이 해당 파일 추적을 중지합니다.

     git add . git commit -m "removed unnecessary files from Git" git push origin


답변자 : youhans


복사/붙여넣기 답변은 git rm --cached -r .; git add .; git status;

.gitignore 파일의 내용을 변경하지 않습니다. 이미 Git 리포지토리에 커밋된 파일을 무시하지만 이제 .gitignore 추가했습니다.

명령의 마지막 부분( git status; )은 변경 사항을 검토하기 위한 것이며 무시할 수 있습니다.



답변자 : Boolean_Type


내 생각에 Git은 파일의 개념 때문에 파일을 완전히 잊을 수 없다고 생각합니다( "차이가 아닌 스냅샷" 섹션 ).

예를 들어 CVS를 사용할 때는 이 문제가 없습니다. CVS는 정보를 파일 기반 변경 목록으로 저장합니다. CVS에 대한 정보는 파일 세트와 시간 경과에 따른 각 파일의 변경 사항입니다.

그러나 Git에서는 프로젝트 상태를 커밋하거나 저장할 때마다 기본적으로 모든 파일 이 그 순간에 어떻게 생겼는지 사진을 찍고 해당 스냅샷에 대한 참조를 저장합니다. 따라서 파일을 한 번 추가하면 해당 스냅샷에 항상 표시됩니다.

이 두 기사가 저에게 도움이 되었습니다.

git assert-unchanged 대 skip-worktreeGit을 사용하여 추적된 파일의 변경 사항을 무시하는 방법

파일이 이미 추적된 경우 이를 기반으로 다음을 수행합니다.

 git update-index --skip-worktree <file>

이 순간부터 이 파일의 모든 로컬 변경 사항은 무시되고 원격으로 이동하지 않습니다. 원격에서 파일을 변경하면 git pull 시 충돌이 발생합니다. 스태시가 작동하지 않습니다. 이 문제를 해결하려면 파일 내용을 안전한 장소에 복사하고 다음 단계를 따르십시오.

 git update-index --no-skip-worktree <file> git stash git pull

파일 콘텐츠는 원격 콘텐츠로 대체됩니다. 안전한 위치의 변경 사항을 파일에 붙여넣고 다시 수행하십시오.

 git update-index --skip-worktree <file>

프로젝트에 참여하는 모든 사람이 git update-index --skip-worktree <file> pull 문제가 없어야 합니다. 이 솔루션은 모든 개발자가 고유한 프로젝트 구성을 가지고 있는 경우 구성 파일에 적합합니다.

원격에서 파일이 변경된 경우 매번 이 작업을 수행하는 것은 그리 편리하지 않지만 원격 콘텐츠에 의한 덮어쓰기로부터 파일을 보호할 수 있습니다.



답변자 : Arslan Ahmad khan


파일/폴더에 대해 다음 단계를 수행합니다.

파일 제거:

  1. 해당 파일을 .gitignore에 추가해야 합니다.
  2. 명령( git rm --cached file name )을 사용하여 해당 파일을 제거해야 합니다.
  3. 실행해야 합니다( git add . ).
  4. ( commit -m ) "파일 제거"가 필요합니다.
  5. 그리고 마지막으로 ( git push ).

예를 들어:

test.txt 파일을 삭제하고 싶습니다. 실수로 GitHub에 푸시하여 제거하고 싶습니다. 명령은 다음과 같습니다.

먼저 .gitignore 파일에 "test.txt"를 추가합니다.

 git rm --cached test.txt git add . git commit -m "test.txt removed" git push

폴더 제거:

  1. 해당 폴더를 .gitignore 파일에 추가해야 합니다.
  2. 명령( git rm -r --cached folder name )을 사용하여 해당 폴더를 제거해야 합니다.
  3. 실행해야 합니다( git add . ).
  4. ( commit -m ) "폴더 제거"가 필요합니다.
  5. 그리고 마지막으로 ( git push ).

예를 들어:

.idea 폴더/디렉토리를 삭제하고 싶습니다. 실수로 GitHub에 푸시하여 제거하고 싶습니다. 명령은 다음과 같습니다.

먼저 .gitignore 파일 에 .idea를 추가합니다.

 git rm -r --cached .idea git add . git commit -m ".idea removed" git push


답변자 : Ameer Deen


Matt Frear 의 답변은 가장 효과적인 IMHO였습니다. 다음은 Windows 사용자가 제외 목록과 일치하는 Git 리포지토리에서만 파일을 제거하기 위한 PowerShell 스크립트입니다.

 # Get files matching exclusionsfrom .gitignore # Excluding comments and empty lines $ignoreFiles = gc .gitignore | ?{$_ -notmatch "#"} | ?{$_ -match "\S"} | % { $ignore = "*" + $_ + "*" (gci -r -i $ignore).FullName } $ignoreFiles = $ignoreFiles| ?{$_ -match "\S"} # Remove each of these file from Git $ignoreFiles | % { git rm $_} git add .


답변자 : Skeets


git rm --cached 명령을 사용하면 원래 질문에 답하지 않습니다.

어떻게 git 이 [파일]을 완전히 잊게 합니까?

사실, 이 솔루션은 git pull 실행할 때 저장소의 다른 모든 인스턴스에서 파일이 삭제 되도록 합니다!

Git이 파일을 잊어버리도록 하는 올바른 방법은 여기 GitHub에 문서화되어 있습니다.

문서를 읽는 것이 좋지만 기본적으로는 다음과 같습니다.

 git fetch --all git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch full/path/to/file' --prune-empty --tag-name-filter cat -- --all git push origin --force --all git push origin --force --tags git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin git reflog expire --expire=now --all git gc --prune=now

full/path/to/file 을 파일의 전체 경로로 바꾸십시오. .gitignore 파일에 파일을 추가했는지 확인합니다.

또한 Git 기록을 변경하기 때문에 저장소에 대한 비 빨리 감기 푸시 를 (일시적으로) 허용해야 합니다.



답변자 : Apreche


파일을 잃어버리지 않도록 안전한 위치로 이동하거나 복사하세요. 그런 다음 파일을 'git rm'하고 커밋합니다.

이전 커밋 중 하나로 되돌리거나 제거되지 않은 다른 분기로 되돌리면 파일이 계속 표시됩니다. 그러나 이후의 모든 커밋에서는 파일을 다시 볼 수 없습니다. 파일이 Git 무시에 있는 경우 파일을 다시 폴더로 이동할 수 있으며 Git은 이를 볼 수 없습니다.



답변자 : Meir Gerenstadt


BFG 는 Git 리포지토리에서 큰 파일이나 암호와 같은 원치 않는 데이터를 제거하도록 특별히 설계되었으므로 큰 기록(현재 커밋에 포함되지 않은) 파일을 제거하는 간단한 플래그가 있습니다. '--strip-blobs- 보다 큰'

 java -jar bfg.jar --strip-blobs-bigger-than 100M

파일을 이름으로 지정하려면 다음과 같이 할 수도 있습니다.

 java -jar bfg.jar --delete-files *.mp4

git filter-branch 보다 10-1000배 빠르며 일반적으로 사용하기 훨씬 쉽습니다 . 자세한 내용은 전체 사용 지침예제 를 확인하세요.

출처: 저장소 크기 줄이기



답변자 : Peter T.


CLI를 사용하고 싶지 않고 Windows에서 작업하는 경우 매우 간단한 솔루션은 TortoiseGit 을 사용하는 것입니다. 메뉴에 "삭제(로컬 유지)" 작업이 제대로 작동합니다.



답변자 : Jay Irvine


나는 JonBrave의 답변이 마음에 commit -a 하는 작업 디렉토리가 너무 지저분합니다.

 git config --global alias.exclude-ignored '!git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cached && git ls-files -z --ignored --exclude-standard | xargs -0 git stage && git stage .gitignore && git commit -m "new gitignore and remove ignored files from index"'

분해:

 git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cached git ls-files -z --ignored --exclude-standard | xargs -0 git stage git stage .gitignore git commit -m "new gitignore and remove ignored files from index"
  • 색인에서 무시된 파일 제거
  • 스테이지 .gitignore 및 방금 제거한 파일
  • 저 지르다


답변자 : Lloyd


이것은 더 이상 최신 Git (작성 당시 v2.17.1)에서 문제가 되지 않습니다.

.gitignore 파일은 마침내 추적되었지만 삭제된 파일을 무시합니다. 다음 스크립트를 실행하여 직접 테스트할 수 있습니다. 최종 git status 문은 "nothing to commit"을 보고해야 합니다.

 # Create an empty repository mkdir gitignore-test cd gitignore-test git init # Create a file and commit it echo "hello" > file git add file git commit -m initial # Add the file to gitignore and commit echo "file" > .gitignore git add .gitignore git commit -m gitignore # Remove the file and commit git rm file git commit -m "removed file" # Reintroduce the file and check status. # .gitignore is now respected - status reports "nothing to commit". echo "hello" > file git status


답변자 : goofology


허용되는 답변은 "Git 이 파일을 "잊게" 하지 않습니다..."(역사적으로). Git은 현재/미래의 파일 만 무시합니다.

이 방법을 사용하면 Git이 무시된 파일( 과거 /현재/미래)을 완전히 잊어버리지 만 작업 디렉터리에서 아무 것도 삭제하지 않습니다 (원격에서 다시 가져오는 경우에도).

이 방법을 사용하려면 무시/잊을 파일이 있는 모든 커밋에서 /.git/info/exclude (선호) 또는 기존 .gitignore 1

Git을 적용하는 모든 방법은 사후 행동을 무시하고 효과적으로 기록을 다시 작성하므로 이 프로세스 후에 가져올 수 있는 모든 공개/공유/협업 리포지토리에 상당한 영향을 미칩니다. 2

일반적인 조언: 깨끗한 리포지토리로 시작하십시오 . 모든 것이 커밋되고 작업 디렉토리나 인덱스에 보류 중인 것은 없으며 백업을 만드십시오 !

또한 이 답변 의 주석/ 수정 기록 ( 및 이 질문수정 기록 )이 유용하거나 계몽될 수 있습니다.

 #Commit up-to-date .gitignore (if not already existing) #This command must be run on each branch git add .gitignore git commit -m "Create .gitignore" #Apply standard Git ignore behavior only to the current index, not the working directory (--cached) #If this command returns nothing, ensure /.git/info/exclude AND/OR .gitignore exist #This command must be run on each branch git ls-files -z --ignored --exclude-standard | xargs -0 git rm --cached #Commit to prevent working directory data loss! #This commit will be automatically deleted by the --prune-empty flag in the following command #This command must be run on each branch git commit -m "ignored index" #Apply standard git ignore behavior RETROACTIVELY to all commits from all branches (--all) #This step WILL delete ignored files from working directory UNLESS they have been dereferenced from the index by the commit above #This step will also delete any "empty" commits. If deliberate "empty" commits should be kept, remove --prune-empty and instead run git reset HEAD^ immediately after this command git filter-branch --tree-filter 'git ls-files -z --ignored --exclude-standard | xargs -0 git rm -f --ignore-unmatch' --prune-empty --tag-name-filter cat -- --all #List all still-existing files that are now ignored properly #If this command returns nothing, it's time to restore from backup and start over #This command must be run on each branch git ls-files --other --ignored --exclude-standard

마지막으로 아래 명령에 대한 중요한 경고/정보가 포함된 이 GitHub 가이드 의 나머지 부분(6단계부터 시작)을 따르세요.

 git push origin --force --all git push origin --force --tags git for-each-ref --format="delete %(refname)" refs/original | git update-ref --stdin git reflog expire --expire=now --all git gc --prune=now

이제 수정된 원격 저장소에서 가져오는 다른 개발자는 백업을 만든 다음 다음을 수행해야 합니다.

 #fetch modified remote git fetch --all #"Pull" changes WITHOUT deleting newly-ignored files from working directory #This will overwrite local tracked files with remote - ensure any local modifications are backed-up/stashed git reset FETCH_HEAD

각주

1 /.git/info/exclude 는 위의 지침을 사용하여 모든 기록 커밋에 적용할 수 있기 때문에 .gitignore 파일 필요한 기록 커밋으로 가져오는 방법에 대한 자세한 내용은 이 답변의 범위를 벗어납니다. 나는 적절한 .gitignore 파일이 내가 가장 먼저 한 것처럼 루트 커밋에 있기를 원했습니다. /.git/info/exclude .gitignore 파일이 커밋 히스토리에 존재하는 위치에 관계없이 동일한 작업을 수행할 수 있기 때문에 신경 쓰지 않을 수 있습니다. 분명히 히스토리를 다시 작성하는 것은 결과를 인식하더라도 매우 민감한 주제입니다.

FWIW, 잠재적인 방법에는 이 질문에 대한 답변과 같이 외부 .gitignore 를 각 커밋에 복사하는 git rebase 또는 git filter-branch 가 포함될 수 있습니다.

2 git rm --cached 명령의 결과를 커밋하여 사후에 Git 무시 동작을 적용하면 나중에 강제 푸시된 원격에서 끌어올 때 새로 무시된 파일 삭제가 발생할 수 있습니다. 다음 git filter-branch 명령의 --prune-empty 플래그는 이전의 "무시된 모든 파일 삭제" 인덱스 전용 커밋을 자동으로 제거하여 이 문제를 방지합니다. Git 기록을 다시 작성하면 커밋 해시도 변경되어 향후 공개/공유/협업 리포지토리에서 가져오기에 큰 피해를 입힐 것입니다. 이러한 저장소에 이 작업을 수행하기 전에 결과를 완전히 이해하십시오. 이 GitHub 가이드 는 다음을 지정합니다.

당신의 협력자들에게 당신의 오래된 (오염된) 리포지토리 히스토리에서 생성한 브랜치를 병합 하지 말고 리베이스하라고 말하십시오. 하나의 병합 커밋으로 방금 제거하는 데 어려움을 겪었던 오염된 기록의 일부 또는 전체를 다시 도입할 수 있습니다.

원격 저장소에 영향 을 주지 않는 대체 솔루션 git update-index --assume-unchanged </path/file> 또는 git update-index --skip-worktree <file> 이며, 그 예는 여기 에서 찾을 수 있습니다.



답변자 : user7718859


이미 커밋된 DS_Store :

 find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch

다음과 같이 무시하십시오.

 echo ".DS_Store" >> ~/.gitignore_global echo "._.DS_Store" >> ~/.gitignore_global echo "**/.DS_Store" >> ~/.gitignore_global echo "**/._.DS_Store" >> ~/.gitignore_global git config --global core.excludesfile ~/.gitignore_global

마지막으로 커밋하십시오!



답변자 : curiousBoy


특히 IDE 기반 파일의 경우 다음을 사용합니다.

예를 들어, slnx.sqlite 파일의 경우 다음과 같이 완전히 제거했습니다.

 git rm {PATH_OF_THE_FILE}/slnx.sqlite -f git commit -m "remove slnx.sqlite"

이러한 파일 중 일부는 프로젝트에 대한 일부 로컬 사용자 설정 및 기본 설정(예: 어떤 파일을 열었는지)을 저장한다는 점을 염두에 두십시오. 따라서 IDE를 탐색하거나 변경할 때마다 해당 파일이 변경되므로 확인하고 커밋되지 않은 변경 사항으로 표시합니다.



답변자 : Khushhalm


이것이 내 문제를 해결한 방법입니다.

git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push

여기서 우리는 기본적으로 이전 커밋에서도 해당 특정 파일의 기록을 다시 쓰려고 합니다.

자세한 내용 은 여기 에서 filter-branch 의 매뉴얼 페이지 를 참조하십시오.

출처: 리포지토리에서 민감한 데이터 제거 - filter-branch 사용

출처: Git: 잘못 커밋된 큰 파일을 제거하는 방법



답변자 : rld


제 경우에는 .gitignore 파일 .envrc "를 넣어야 했습니다.

그리고 다음을 사용했습니다.

 git update-index --skip-worktree .envrc git rm --cached .envrc

그리고 파일이 삭제되었습니다.

그런 다음 파일이 제거되었다고 다시 커밋했습니다.

git log -p 명령을 사용했을 때 파일의 콘텐츠( Amazon S3 의 비밀 자격 증명)에 제거된 콘텐츠가 표시되었고 Git 기록에 이 콘텐츠를 표시하고 싶지 않습니다. 저장소.

그런 다음이 명령을 사용했습니다.

 git filter-branch --index-filter 'git rm --cached --ignore-unmatch .envrc' HEAD

그리고 내용을 다시 보지 않습니다.



답변자 : DC.Skells


제 경우에는 제거해야 하는 여러 디렉토리에 여러 .lock 파일이 있었습니다. 나는 다음을 실행했고 제거하기 위해 각 디렉토리로 이동할 필요 없이 작동했습니다.

 git rm -r --cached **/*.lock

이렇게 하면 내가 있던 '루트' 아래의 각 폴더로 이동하고 패턴과 일치하는 모든 파일을 제외했습니다.



답변자 : RajVimalC


누군가 Windows에서 어려움을 겪고 있고 전체 폴더를 무시하고 싶다면 파일 탐색기에서 원하는 '폴더'로 이동하여 마우스 오른쪽 버튼을 클릭하고 'Git Bash Here'를 수행하십시오(Git for Windows가 설치되어 있어야 함).

다음 명령을 실행합니다.

 git ls-files -z | xargs -0 git update-index --assume-unchanged


답변자 : Abraham


echo node_modules >> .gitignore 와 같은 명령을 사용하여 gitignore 파일을 만든 경우 작동하지 않습니다.

Windows 터미널은 파일을 UCS-2 LE BOM 하고 git은 이를 받아들이지 않는 것 같습니다.

Notepad 에서 열어 이 문제를 해결 UTF-8 인코딩으로 다시 저장할 수 있습니다.

메모장 utf-8 인코딩 저장

지금 작동합니다.

echo "filetoignore" >> .gitignore 실제로 매우 편리해 보이기 때문에 이 문제를 수정해야 한다고 생각합니다.



출처 : Here


출처 : http:www.stackoverflow.com/questions/1274057/how-can-i-make-git-forget-about-a-file-that-was-tracked-but-is-now-in-gitign">

반응형