Eliminación de archivos no deseados del historial, incluidas todas las referencias con filtro-rama
Recientemente he clonado un repositorio SVN que solía tener algunos binarios, que ya no son necesarios. Desafortunadamente, ya lo he enviado a Github con los binarios incluidos. Ahora quiero eliminarlos usando 'git filter-branch' pero me enfrento a algunos problemas cuando se trata de etiquetas y ramas.
Básicamente, he creado un script de shell simple para eliminar una lista de archivos que han sido determinados por el siguiente comando:
git rev-list --objects --all | grep .jar > files.txt
El script para eliminación se parece a lo siguiente:
#!/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
Tengo algunas etiquetas (todas enumeradas en .git / packed-refs), una .git / refs / remotes / origin (que apunta al repositorio de Github). La eliminación de los archivos que utilizan la secuencia de comandos anterior no tiene el efecto deseado ('du -cm' permanece para mostrar el mismo tamaño; 'git rev-list' sigue listando los archivos) hasta que elimine manualmente todas las referencias de .git / package -refs y el directorio .git / refs / remotes / origin.
Naturalmente, estoy perdiendo todas las etiquetas, así como la posibilidad de enviar mis cambios locales a Github con este enfoque. ¿Hay algo que haya omitido o hay una forma alternativa de eliminar archivos de todas las ramas / etiquetas sin destruir mi historial?
Muchas gracias de antemano, Matthes.