В нашем текущем репо есть десятки тысяч коммитов, а свежий клон передает почти гигантские данные (есть много файлов jar, которые с тех пор были удалены в истории). Мы хотели бы сократить этот размер, создав новое репо, которое хранит полную историю только для файлов, которые в настоящее время активны в репо, или, возможно, просто изменит текущее репо, чтобы очистить историю удаленных файлов. Но я не уверен, как это сделать в практической усадьбе.
Я пробовал script в Удалить удаленные файлы из истории git:
for del in `cat deleted.txt`
do
git filter-branch --index-filter "git rm --cached --ignore-unmatch $del" --prune-empty -- --all
# The following seems to be necessary every time
# because otherwise git won't overwrite refs/original
git reset --hard
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --aggressive --prune=now
done;
Но учитывая, что у нас есть десятки тысяч удаленных файлов в истории и десятки тысяч коммитов, запуск script займет целую вечность. Я начал запускать это только для ОДНОГО удаленного файла 2 часа назад, и команда filter-branch все еще работает, и каждый из 40 000+ совершает одно за другим, и это работает на новом Macbook pro с накопителем SSD.
Я также прочитал страницу https://help.github.com/articles/remove-sensitive-data, но это работает только для удаления отдельных файлов.
Кто-нибудь мог это сделать? Я действительно хочу сохранить историю отслеживаемых файлов, я не уверен, будет ли экономия на экономии пространства стоить создания нового репо, если мы не сможем сохранить историю.