Removendo arquivos indesejados do histórico, incluindo todos os refs com ramificação de filtro

Eu recentemente clonei um repositório SVN que costumava ter alguns binários nele, que não são mais necessários. Infelizmente, já o enviei para o Github com os binários inlcuded. Agora eu quero removê-los usando 'git filter-branch', mas estou enfrentando alguns problemas quando se trata de tags e branches.

Basicamente, criei um script de shell simples para remover uma lista de arquivos que foram determinados pelo seguinte comando:

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

O script para remoção é semelhante ao seguinte:

#!/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

Eu tenho algumas tags (todas listadas em .git / packed-refs), uma .git / refs / remotes / origin (apontando para o repositório do Github). A remoção dos arquivos usando o script acima não tem o efeito desejado ('du -cm' permanece com saída do mesmo tamanho; 'git rev-list' ainda listando os arquivos) até que eu remova manualmente todas as referências de .git / packed -refs e o diretório .git / refs / remotes / origin.

Naturalmente, estou perdendo todas as tags, assim como a possibilidade de empurrar minhas alterações locais de volta para o Github com essa abordagem. Existe alguma coisa que eu perdi ou existe uma maneira alternativa de remover arquivos de todas as ramificações / tags sem destruir meu histórico?

Muito obrigado antecipadamente, Matthes

questionAnswers(1)

yourAnswerToTheQuestion