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.

Respuestas a la pregunta(1)

Su respuesta a la pregunta