Usuwanie niechcianych plików z historii, w tym wszystkich referencji z filtrem

Niedawno sklonowałem repozytorium SVN, w którym kiedyś znajdowało się kilka plików binarnych, które nie są już potrzebne. Niestety, zepchnąłem go już do Githuba z plikami binarnymi. Teraz chcę je usunąć za pomocą 'git filter-branch', ale mam problemy z tagami i gałęziami.

Zasadniczo stworzyłem prosty skrypt powłoki, aby usunąć listę plików, które zostały określone przez następujące polecenie:

git rev-list --objects --all | grep .jar > files.txt

Skrypt do usuwania wygląda następująco:

#!/bin/sh
while read file_hash file_to_remove
do
    echo "Removing "$file_to_remove;
    git filter-branch --index-filter "git rm --cached --ignore-unmatch $file_to_remove"
    rm -rf .git/refs/original/;
    git reflog expire --all --expire-unreachable=0;
    git repack -A -d;
    git prune
done < $1

Mam kilka tagów (wszystkie wymienione w .git / packed-refs), jeden .git / refs / remotes / origin (wskazujący na repo Github). Usunięcie plików za pomocą powyższego skryptu nie ma pożądanego efektu („du -cm” pozostaje do wyprowadzenia tego samego rozmiaru; „git rev-list” nadal wyświetla pliki), dopóki ręcznie nie usunę wszystkich referencji z .git / pakowane -refs i katalog .git / refs / remotes / origin.

Oczywiście tracę wszystkie znaczniki, jak również możliwość przesuwania moich lokalnych zmian z powrotem do Github dzięki temu podejściu. Czy jest coś, czego brakowało lub czy istnieje alternatywny sposób usuwania plików ze wszystkich gałęzi / tagów bez niszczenia mojej historii?

Z góry wielkie dzięki, Matthes

questionAnswers(1)

yourAnswerToTheQuestion