Сценарий: У меня есть структура каталогов, которая время от времени меняется. Я хотел бы иметь резервные копии всех состояний, в которых он когда-то был. Для этого я просто установил его как репозиторий git и выполнял задание cron git commit -m 'croncommit'
один раз в день. Это прекрасно работает и позволяет мне просмотреть любое состояние структуры каталогов в истории.Git: Как забыть очень старые коммиты
Но репозиторий git растет, даже если структура каталогов не работает. Если бы у меня когда-то был огромный файл там на короткое время, он всегда оставался в репозитории. Это хорошо и правильно с точки зрения git, конечно, но поскольку для меня это просто средство резервного копирования, имеет смысл хотеть сохранить только последние состояния, скажем, за последний месяц.
Я ищу способ удаления состояний (коммиттов) старше определенной продолжительности (например, один месяц) из данного репозитория. Я думаю, что это можно сделать, свернув все коммиты, которые старше определенного возраста на один.
Но я не могу найти правильную команду и синтаксис для этой задачи.
Как это сделать?
Это то, что я искал, спасибо большое. Я взял на себя смелость переписать сценарий Perl как скрипт Bash (и добавил его к вашему ответу для полноты). Надеюсь, вы не возражаете :) – Alfe
Остается один вопрос: в каком случае вы проверяете, когда вы проверяете определение '$ rebase'? Когда это может быть неопределенным (или пустым в версии bash)? – Alfe
@Alfe Добро пожаловать. Ура! Проверка заключается в маловероятном случае, когда в вашей ветке присутствует одиночная фиксация с датой коммиттера (что используется 'git log --since = ...'), новее 30 дней. –