Entfernen unerwünschter Dateien aus dem Verlauf, einschließlich aller Referenzen mit Filter-Branch
Ich habe kürzlich ein SVN-Repository geklont, in dem sich einige Binärdateien befanden, die nicht mehr benötigt werden. Leider habe ich es bereits mit den enthaltenen Binaries zu Github geschickt. Ich möchte diese nun mit 'git filter-branch' entfernen, habe aber Probleme mit Tags und Branches.
Grundsätzlich habe ich ein einfaches Shell-Skript erstellt, um eine Liste von Dateien zu entfernen, die mit dem folgenden Befehl ermittelt wurden:
git rev-list --objects --all | grep .jar > files.txt
Das Skript zum Entfernen sieht folgendermaßen aus:
#!/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
Ich habe ein paar Tags (alle in .git / packing-refs aufgelistet), ein .git / refs / remotes / origin (zeigt auf das Github-Repo). Das Entfernen der Dateien mithilfe des obigen Skripts hat nicht den gewünschten Effekt ("du -cm" bleibt für die Ausgabe in derselben Größe erhalten; "git rev-list" listet die Dateien weiterhin auf), bis ich alle Verweise manuell aus .git / packing entferne -refs und das Verzeichnis .git / refs / remotes / origin.
Natürlich verliere ich alle Tags sowie die Möglichkeit, meine lokalen Änderungen mit diesem Ansatz wieder auf Github zu übertragen. Gibt es etwas, das ich verpasst habe oder gibt es eine alternative Möglichkeit, Dateien aus allen Zweigen / Tags zu entfernen, ohne meinen Verlauf zu zerstören?
Vielen Dank im Voraus, Matthes