Некоторое время пытаюсь применять git для отслеживания изменений в файлах на системе (VPS на Gentoo).
Возможности, ради которых я пошёл на такой изврат:
- git status, git diff удобно покажут, что я изменил в процессе редактирования настроек с момента создания предыдущей контрольной точки (коммита) - контроллируем отсутствие случайных изменений;
- git status покажет, какие именно файлы изменены в процессе emerge, dispatch-conf;
- тот же git status покажет, какие спонтанные изменения происходят в системе помимо прямых действий администратора;
- шаги изменения настроек или установки новых пакетов можно и нужно аннотировать (в commit message);
- удобно найти в истории и просмотреть содержание конкретного изменения - может помочь вспомнить при настройке других систем, что именно следует менять, и в какой последовательности настраивать и устанавливать пакеты;
- если коммитить аккуратно и гранулированно, то лог коммитов является готовым руководством по совершению аналогичных инсталляций.
- можно легко откатываться на последнюю или предыдущие контрольные точки через git reset --hard.
Но, увы, есть серьёзные недостатки:
- при появлении новых файлов нужно делать «git add». Если это результаты emerge - то как минимум «git add .» (cwd=/), плюс нюансы (см. ниже);
- некоторые файлы и каталоги вводить под отслеживание git-ом нецелесообразно, в результате имеем большой файл .gitignore, который по ходу эксплуатации необходимо поддерживать в актуальном состоянии, а также удалять ранее попавшие файлы подобного рода из старых коммитов с помощью git-filter-branch (с которым вообще мозг сломаешь, тем более, что нужен он редко);
- в силу того, что определённые файлы, находящиеся в системе, мы в git не храним, а также потому, что git не хранит инфу о владельце, и, возможно, ещё по массе причин, результирующий репозиторий НЕ ЯВЛЯЕТСЯ ПОЛНОЦЕННЫМ БЭКАПОМ, при этом
- занимаемый объём под .git ощутим.
Итак - есть ли системы бэкапа, обладающие плюсами описанного способа, и не имеющие данных минусов? Иными словами, с возможностями:
- аннотирования инкрементальных бекапов (git commit -m);
- запуска создания инкрементального бэкапа командой с бэкапируемой системы, с заданием аннтоации;
- пометить инкрементальный бэкап как вечно хранимый, а также с вечным хранением всех аннотаций (для получения «записок склерозника»);
- увидеть содержимое инкрементального бэкапа, примерно в виде diff;
- аналогичными git status/git diff, доступными для запуска на бэкапируемой машине.
P. S. С серьёзными решениями для бэкапа не знаком, данные на практике резервирую дублированием с помощью rsync или git.