Недавно я клонировал репозиторий 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/packed-refs), один .git/refs/remotes/origin (указывающий на репозиторий Github). Удаление файлов с помощью приведенного выше сценария не дает желаемого эффекта («du -cm» остается для вывода того же размера; «git rev-list» по-прежнему перечисляет файлы), пока я вручную не удалю все ссылки из .git/packed -refs и каталог .git/refs/remotes/origin.
Естественно, при таком подходе я теряю все теги, а также возможность отправить свои локальные изменения обратно на Github. Есть ли что-то, что я пропустил, или есть альтернативный способ удаления файлов из всех веток/тегов без уничтожения моей истории?
Заранее большое спасибо, Маттес