У меня есть репозиторий 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
в своей локальной копии, а затем нажимать изменения.
Итак, я предварительно планирую выполнить следующие шаги:
- Скажите всем моим разработчикам, чтобы они выполняли, нажимали и перестали работать немного.
- Войдите в сервер и запустите фильтр на центральном репо.
- Попросите всех удалить старые копии и снова клонировать с сервера.
Звучит ли это правильно? Это лучшее решение?