git은 여러 커밋 전에 삭제된 저장소 기록에서 큰 하위 디렉터리를 제거합니다.

git은 여러 커밋 전에 삭제된 저장소 기록에서 큰 하위 디렉터리를 제거합니다.

이 저장소에는 몇 달 전에 커밋에서 제거한 대용량 파일의 큰 하위 디렉터리가 있으며 이제 저장소에서 영원히 삭제하고 싶습니다. 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나에게 효과적이었고 다른 사람들은 그렇지 않았습니다.

https://stackoverflow.com/a/32886427/4386557

관련 정보