내 저장소에 무시해야 할 파일이 있는데 .gitignore에 파일을 추가했지만 물론 내 저장소에서 제거되지는 않습니다.
내 질문은, 내 기록을 다시 작성하고 이러한 모든 파일을 쉽게 제거 할 수있는 filter-branch를 사용하는 마술 명령이나 스크립트가 있습니까? 또는 단순히 커밋을 만들어 명령을 제거하는 명령입니까?
내 저장소에 무시해야 할 파일이 있는데 .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
이러한 파일없이 전체 기록을 다시 쓰는 것과 관련하여 자동 으로 수행 할 수있는 방법 이 있는지 의심 합니다.
그리고 우리는 역사를 다시 쓰는 것이 나쁘다는 것을 알고 있습니다. :)
git ls-files -i -z --exclude-from=.gitignore | xargs -0 git rm --cached
트릭 할 것 같다
git ls-files -i --exclude-from=.gitignore | %{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
(유닉스에서) 도움을 줄 것입니다.
이 명령은 준비 영역에없는 새 파일 도 제거 합니다.
도움이 되길 바랍니다.
.gitignore
되어 추적되고.
git clean -xdn
삭제되지 않습니다 예행 연습이다. 다음 것입니다.
sed를 사용하여 .gitignore 문의 출력을 조작하여 매우 간단한 솔루션을 수행했습니다.
cat .gitignore | sed '/^#.*/ d' | sed '/^\s*$/ d' | sed 's/^/git rm -r /' | bash
설명:
sed
간단합니까?
리눅스에서는이 명령을 사용할 수 있습니다 :
예를 들어 "* .py ~"를 삭제하고 싶습니다. 그래서 내 명령은 ==>이어야합니다.
find . -name "*.py~" -exec rm -f {} \;