Удаление ненужных файлов из истории, включая все ссылки с помощью filter-branch
Недавно я клонировал SVN-репозиторий, в котором раньше было несколько двоичных файлов, которые больше не нужны. К сожалению, я уже отправил его в Github с включенными двоичными файлами. Теперь я хочу удалить их, используя 'git filter-branch', но я сталкиваюсь с некоторыми проблемами, когда речь идет о тегах и ветвях.
По сути, я создал простой сценарий оболочки для удаления списка файлов, которые были определены с помощью следующей команды:
git rev-list --objects --all | grep .jar > files.txt
Скрипт для удаления выглядит следующим образом:
#!/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
У меня есть несколько тегов (все они перечислены в .git / pack-refs), один .git / refs / remotes / origin (указывающий на репозиторий Github). Удаление файлов с использованием вышеуказанного сценария не дает желаемого эффекта («du -cm» остается для вывода того же размера; «git rev-list» по-прежнему перечисляет файлы), пока я вручную не удаляю все ссылки из .git / pack -refs и каталог .git / refs / remotes / origin.
Естественно, я теряю все теги, а также возможность перенести мои локальные изменения обратно в Github с этим подходом. Есть ли что-то, что я пропустил или есть альтернативный способ удаления файлов из всех веток / тегов, не разрушая мою историю?
Большое спасибо заранее, Маттес