У меня есть git-репо с некоторыми очень большими двоичными файлами. Они мне больше не нужны, и меня не волнует возможность извлекать файлы из предыдущих коммитов. Итак, чтобы уменьшить размер репо, я хочу полностью удалить двоичные файлы из истории.
После поиска в Интернете я пришел к выводу, что мой лучший (только?) Вариант - использовать git-filter-branch
:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch big_1.zip big_2.zip etc.zip' HEAD
Похоже, это хороший подход?
Предполагая, что ответ - да, у меня есть еще одна проблема, с которой приходится бороться. В руководстве git есть это предупреждение :
ВНИМАНИЕ! Переписанная история будет иметь разные имена объектов для всех объектов и не будет сходиться с исходной ветвью. Вы не сможете легко перемещать и распространять переписанную ветку поверх оригинальной ветви. Пожалуйста, не используйте эту команду, если вы не знаете всех последствий, и избегайте ее использования в любом случае, если для решения вашей проблемы будет достаточно простого коммита. (Обратитесь к разделу «ВОССТАНОВЛЕНИЕ ИЗ РЕБАЗЫ UPSTREAM» в git-rebase (1) для получения дополнительной информации о перезаписи опубликованной истории.)
У нас есть удаленное репо на нашем сервере. Каждый разработчик подталкивает и вытягивает из него. Исходя из приведенного выше предупреждения (и моего понимания того, как работает git-filter-branch
), я не думаю, что смогу запустить git-filter-branch
на своей локальной копии и затем нажать изменения.
Итак, я предварительно планирую выполнить следующие шаги:
- Скажите всем моим разработчикам на некоторое время зафиксировать, нажать и перестать работать.
- Войдите на сервер и запустите фильтр на центральном репо.
- Попросите всех удалить свои старые копии и снова клонировать с сервера.
Это звучит правильно? Это лучшее решение?