Каков самый простой способ создания инкрементных резервных копий репозитория git с git bundle
?
Если бы я просто хотел создать резервную копию одной ветки, я мог бы что-то сделать в этих строках:
git bundle create foo last-backup..master
git tag -f last-backup master
Но что, если я хочу сделать резервную копию всего (включая все ветки)?
Чтобы ответить на вопросы в комментариях:
Строго говоря, мне не нужно использовать обычные пакеты git, если решение удовлетворяет следующим свойствам:
-
Каждая инкрементная резервная копия - это один файл. Я могу его хранить где-то, а последующие инкрементные резервные копии не нуждаются в изменении этого файла.
-
Размер файла приблизительно равен общему размеру git, который выполняется с момента предыдущей резервной копии. Изменения в двоичных файлах также эффективно сохраняются.
-
Полная резервная копия + все инкрементные резервные копии с тех пор содержат все, что мне нужно, чтобы автоматически восстановить репозиторий, включая все ветки.
(Как наивный пример простое создание tar-архива с недавно измененными файлами в репозитории git не удовлетворяет второму требованию, если, например, произошла автоматическая сборка мусора.)
И в идеале я также хотел бы иметь систему, которая идиот-доказана:
- Я могу получить практически любую полную резервную копию моего репозитория git, а также все последние инкрементные резервные копии, и я могу просто "вытащить" все из резервных копий, и репозиторий будет обновлен. В частности, не имеет значения, существует ли частичное перекрытие между полным резервным копированием и инкрементными резервными копиями.
Git расслоения удовлетворяют всем этим очень хорошо, если мне нужно только обрабатывать одну ветвь.