이 저장소에는 몇 달 전에 커밋에서 제거한 대용량 파일의 큰 하위 디렉터리가 있으며 이제 저장소에서 영원히 삭제하고 싶습니다. huge 하위 디렉터리는 더 이상 다운로드에 없지만 개체 디렉터리는 매우 큽니다.
체크아웃/복제에는 시간이 오래 걸립니다. 이는 .git/objects 디렉토리가 크기 때문이라고 생각합니다.
repo
<files to keep>
<massive subdirectory>
다수의 하위 디렉터리를 삭제하고 싶습니다.
https://stackoverflow.com/questions/10067848/remove-folder-and-its-contents-from-git-githubs-history
위의 링크에는 이 스크립트에 넣은 프로세스에 대한 긴 설명이 있습니다.
#!/bin/bash
if [ -z "$1" ]; then
echo "missing argument: subdirectory to remove"
exit
fi
git filter-branch --tree-filter 'rm -rf $1' --prune-empty HEAD
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
echo $1/ >> .gitignore
git add .gitignore
git commit -m 'Removing $1 from git history'
git gc
git push origin master --force
명백한 오류 없이 실행한 다음 저장소를 복제하고 .git/objects 디렉터리의 크기가 줄어들지 않는 것을 발견했습니다.
스크립트에 뭔가 빠진 것이 있나요? 예나무엇이 빠졌나요? 최신 버전의 git에서는 이러한 요구에 맞는 보다 직접적인 기능을 도입합니까?
다른 방법이 있나요?
답변1
이 답변은 index-filter
나에게 효과적이었고 다른 사람들은 그렇지 않았습니다.