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