@mmvds

Как удалить историю коммитов только для одного файла в репозитории?

В репозитории есть дамп базы данных (несколько десятков МБ), каждый день в час ночи настроено автоматическое создание дампа и git add и git push всех измененных данных, в т.ч. заливается дамп базы, что удобно как дополнительный бэкап, но к сожалению, git плохо обрабатывает изменения бинарных данных, коим является дамп и в итоге за несколько месяцев .git/objects/pack сильно разрослась (несколько ГБ)

Вопрос, как из истории коммитов убрать все коммиты для конкретно этого файла dump.db кроме последнего? При этом, историю коммитов остальных файлов хотелось бы сохранить
  • Вопрос задан
  • 1589 просмотров
Решения вопроса 1
Aetae
@Aetae
Тлен
Это можно сделать только полностью переписав всю историю: будут изменены все хэши во всех коммитах и во всех ветках. Всем разработчикам надо будет заново вычекать все нужные ветки.
Если тебя это не пугает, то:
git filter-branch --index-filter "git rm --cached --ignore-unmatch файл" HEAD

В дальнейшем файл лучше не хранить в системе контроля версий.
Если же очень хочется - придумать обходной вариант. Например (навскидку) использовать для файла git submodules и хранить его в отдельном проекте, в коем при каждом обновлении тупо удалять предыдущую ветку и создавать новую. В основной же проект добавить хук, который будет каждый раз с нуля вычекивать этот submodule.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Никак. Вообще. Коммит это изменение состояния всего репозитория. Понятия файлов там достаточно абстрактно
Ответ написан
Комментировать
delphinpro
@delphinpro
frontend developer
Можно только полностью удалить файл из истории.
Вариант: Как удалить файл из истории коммитов в GIT?

А потом залить последнюю версию заново.

Я так не делал, не знаю, насколько верно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы