У меня есть git repo с очень большими двоичными файлами. Мне они больше не нужны, и я не забочусь о том, чтобы проверить файлы с более ранних коммитов. Итак, чтобы уменьшить размер репо, я хочу полностью удалить двоичные файлы из истории.Обновите команду разработчиков с переписанной историей Git repo, удалив большие файлы
После веб-поиска, я пришел к выводу, что мой лучший (только?) Вариант заключается в использовании git-filter-branch
:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch big_1.zip big_2.zip etc.zip' HEAD
это, кажется ли, как хороший подход до сих пор?
Предполагая, что да, у меня есть еще одна проблема, с которой можно бороться. git manual has this warning:
ВНИМАНИЕ! Переписанная история будет иметь разные имена объектов для всех объектов и не будет сходиться с исходной ветвью. Вы не сможете легко нажимать и распространять переписанную ветку поверх исходной ветви. Пожалуйста, не используйте эту команду, если вы не знаете о всех последствиях, и избегайте ее использования в любом случае, если достаточно простой фиксации, чтобы исправить вашу проблему. (Смотрите раздел «Восстановление с верховьев перебазироваться» в GIT-перебазирования (1) для получения дополнительной информации о перезаписи опубликованной истории.)
У нас есть удаленный репозиторий на нашем сервере. Каждый разработчик подталкивает и извлекает из него. Основываясь на вышеприведенном предупреждении (и мое понимание того, как работает git-filter-branch
), я не думаю, что смогу запустить git-filter-branch
на моей локальной копии, а затем нажимать изменения.
Итак, я предварительно планирую пройти следующие шаги:
- Скажите все мои разработчик совершить, толчок, и прекратить работу на некоторое время.
- Войдите в систему и запустите фильтр на центральном репо.
- Попросите всех удалить свои старые копии и снова клонировать с сервера.
Звучит это правильно? Это лучшее решение?
Это происходит для меня теперь, что * простой * вещь, чтобы сделать может быть, чтобы ваши разработчики каждом запуске идентичная команда 'git-filter-branch'. Они должны заканчиваться историями, идентичными тем, что вы произвели, без повторного клонирования или переустановки вручную. –
@BenJackson файлы кода будут идентичными, но объекты commit будут иметь разные метаданные коммиттера, добавленные rebase. – Douglas
@Douglas Я не думаю, что 'git filter-branch' изменяет данные коммиттера, если вы явно не попросите его об этом. ('git commit -rebase' делает, но не' git filter-branch', насколько я могу видеть.) – cdhowie