У меня было несколько больших файлов, которые случайно были отслежены в git. Я не осознавал этого, пока не совершил много коммитов позже. Я переместил эти файлы в git LFS, но теперь я хотел бы удалить их из своей обычной базы данных git, так как их дельты занимают очень много места.
Как удалить файл из базы данных git после его перемещения в LFS?
Ответы (1)
Имейте в виду, что все решения представляют собой перезапись истории, что потребует определенного уровня координации со всеми, у кого есть клон репозитория, чтобы избежать отмены вашей работы.
Три инструмента, которые могут с этим справиться, каждый со своими плюсами и минусами:
Наиболее специализированным для вашей цели будет lfs migrate
. https://github.com/bozaro/git-lfs-migrate
Другой вариант - BFG. По моему опыту, он делает некоторые вещи немного лучше, а другие - хуже, по сравнению с lfs-migrate. У него также есть возможность просто вырезать большие файлы без замены файлов-указателей, если вы не заботитесь о нарушении истории. https://rtyley.github.io/bfg-repo-cleaner/
Или, если вы хотите придерживаться встроенных команд git, есть git filter-branch
(но это будет медленнее и сложнее). Вы можете настроить index-filter
на git rm --cached --ignore-unmatch
затронутые пути (если они не перемещаются). Это может быть медленным и нарушит затронутые коммиты. Вместо этого вы можете использовать tree-filter
, который заменяет затронутые пути соответствующими файлами указателей и вставляет подходящий файл .gitattributes
. Это еще медленнее (и, возможно, сложнее сделать это правильно).