gitignore 파일을 업데이트 한 후 git 저장소를 "새로 고침"할 수 있습니까?
방금 gitignore에 더 많은 무시 (?)를 추가하고 새 파일과 일치하는 저장소에 이미있는 항목을 제거하고 싶습니다.
gitignore 파일을 업데이트 한 후 git 저장소를 "새로 고침"할 수 있습니까?
방금 gitignore에 더 많은 무시 (?)를 추가하고 새 파일과 일치하는 저장소에 이미있는 항목을 제거하고 싶습니다.
답변:
" .gitignore 파일을 무시하지 않음 "에 언급 된 솔루션 은 약간 극단적이지만 작동해야합니다.
# rm all files
git rm -r --cached .
# add all files as per new .gitignore
git add .
# now, commit for new .gitignore to apply
git commit -m ".gitignore is now working"
( 아래의 jball037 주석과 같은 사건을 피하기 위해 유지하려는 변경 사항을 먼저 커밋하십시오 .
이 옵션은 디스크의 파일을 그대로 유지합니다.) --cached
또한 블로그 게시물 " Git에서 이미 추적 된 파일을 무시하도록 만들기 "에보다 세분화 된 솔루션이 있습니다 .
git rm --cached `git ls-files -i --exclude-standard`
과 같은 오류 메시지가 표시
fatal: path spec '...' did not match any files
되면 경로에 공백이있는 파일이있을 수 있습니다.옵션을 사용하여 다른 모든 파일을 제거 할 수 있습니다
--ignore-unmatch
.
git rm --cached --ignore-unmatch `git ls-files -i --exclude-standard`
그러나 일치하지 않는 파일은 저장소에 남아 있으며 경로를 큰 따옴표로 묶어 명시 적으로 제거해야합니다.
git rm --cached "<path.to.remaining.file>"
이해가 안될 수도 있지만 새로 무시한 파일을 삭제하려고합니까? 아니면 이러한 파일의 새로운 수정 사항을 무시 하시겠습니까? 이 경우 문제가 해결 된 것입니다.
이전에 커밋 된 무시 된 파일을 삭제하려면
git rm –cached `git ls-files -i –exclude-standard`
git commit -m 'clean up'
git ls-files -i –exclude-standard
자식은``-m '정리 커밋
나는 이것이 오래된 질문이라는 것을 알고 있지만 파일 이름에 공백이 있으면 gracchus의 솔루션이 작동하지 않습니다. 공백이있는 파일 이름에 대한 VonC의 솔루션은을 사용하여 파일 이름을 제거하지 않고 --ignore-unmatch
수동으로 제거하는 것이지만 많은 경우 잘 작동하지 않습니다.
다음은 bash 배열을 사용하여 모든 파일을 캡처하는 솔루션입니다.
# Build bash array of the file names
while read -r file; do
rmlist+=( "$file" )
done < <(git ls-files -i --exclude-standard)
git rm –-cached "${rmlist[@]}"
git commit -m 'ignore update'