Как удалить файл из базы данных git после его перемещения в LFS?

У меня было несколько больших файлов, которые случайно были отслежены в git. Я не осознавал этого, пока не совершил много коммитов позже. Я переместил эти файлы в git LFS, но теперь я хотел бы удалить их из своей обычной базы данных git, так как их дельты занимают очень много места.


person Nick Chapman    schedule 03.07.2017    source источник


Ответы (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. Это еще медленнее (и, возможно, сложнее сделать это правильно).

person Mark Adelsberger    schedule 03.07.2017