IT

.gitignore에 나열되었지만 여전히 저장소에있는 파일을 제거하는 방법은 무엇입니까?

lottoking 2020. 4. 2. 08:23
반응형

.gitignore에 나열되었지만 여전히 저장소에있는 파일을 제거하는 방법은 무엇입니까?


내 저장소에 무시해야 할 파일이 있는데 .gitignore에 파일을 추가했지만 물론 내 저장소에서 제거되지는 않습니다.

내 질문은, 내 기록을 다시 작성하고 이러한 모든 파일을 쉽게 제거 할 수있는 filter-branch를 사용하는 마술 명령이나 스크립트가 있습니까? 또는 단순히 커밋을 만들어 명령을 제거하는 명령입니까?


저장소에서 수동으로 제거 할 수 있습니다.

git rm --cached file1 file2 dir/file3

또는 파일이 많은 경우 :

git rm --cached `git ls-files -i --exclude-from=.gitignore`

그러나 이것은 Windows의 Git Bash에서 작동하지 않는 것 같습니다. 오류 메시지가 나타납니다. 다음이 더 잘 작동합니다.

git ls-files -i --exclude-from=.gitignore | xargs git rm --cached  

이러한 파일없이 전체 기록을 다시 쓰는 것과 관련하여 자동 으로 수행 할 수있는 방법 이 있는지 의심 스럽 습니다.
그리고 우리는 역사를 다시 쓰는 것이 나쁘다는 것을 알고 있습니다. :)


모든 OS에서 작동하는 더 쉬운 방법은

git rm -r --cached .
git add .
git commit -m "Removing all files in .gitignore"

기본적으로 .gitignore의 파일을 제외한 모든 파일을 읽었습니다.


.gitignore 의 파일을 추적하지 않으므로 git clean 명령을 사용하여 버전 제어가 아닌 파일을 재귀 적으로 제거 할 수 있습니다 .

드라 이런 git clean -xdn을 수행하고 제거 할 대상을 확인하는 데 사용 합니다.
그런 다음 사용 git clean -xdf하여 실행하십시오.

기본적으로 git clean -h또는 man git-clean(유닉스에서) 도움을 줄 것입니다.

이 명령은 준비 영역에없는 새 파일 도 제거 합니다.

도움이 되길 바랍니다.


sed를 사용하여 .gitignore 문의 출력을 조작하여 매우 간단한 솔루션을 수행했습니다.

cat .gitignore | sed '/^#.*/ d' | sed '/^\s*$/ d' | sed 's/^/git rm -r /' | bash

설명:

  1. .gitignore 파일을 인쇄하십시오
  2. 인쇄물에서 모든 설명을 제거
  3. 빈 줄을 모두 삭제
  4. 줄의 시작 부분에 'git rm -r'을 추가하십시오
  5. 모든 줄을 실행하십시오.

git은 .gitignore에 파일을 추가하면 .gitignore 패턴과 일치하는 파일을 무시합니다.

그러나 저장소에 이미 존재하는 파일은 계속 남아 있습니다.

git rm files_ignored; git commit -m 'rm no use files'무시 된 파일을 삭제 하는 사용 합니다.

참고 URL : https://stackoverflow.com/questions/13541615/how-to-remove-files-that-are-listed-in-the-gitignore-but-still-on-the-repositor

반응형