В Gentoo инструмент для управления изменениями в / etc, вызванными пакетами (называемый dispatch-conf), поддерживает rcs для отслеживания изменений, но это не очень эффективно.
Я склоняюсь к версии моего / etc через git
, тем более что, используя разные ветки, я могу сохранять свои / etc как можно более похожими в разных дистрибутивах, сохраняя как можно больше вещей в одном месте (для некоторых областей, которые явно не работают, конфигурация apache например, действительно отличается в разных дистрибутивах). Это работает так:
У меня есть master
репозиторий с файлами конфигурации по умолчанию. Теперь я вступаю в контакт с новым дистрибутивом, поэтому создаю новую ветку на основе моей master
ветки на основе имени дистрибутива (в данном примере debian). Debian хранит некоторые файлы конфигурации в месте, отличном от моего, master
поэтому я делаю a git mv file new_loc
. И все хорошо. Я переключаюсь назад master
и изменяю этот файл, потому что я добавил определенную директиву config, когда я объединяюсь master
с моей debian
веткой, перемещенный файл изменяется, так что я могу просто изменить большинство вещей в моей master
ветке и просто слить изменения в моем «дистрибутиве» ветви (как правило, они, как правило, представляют собой смесь веток распределения и назначения, сервер Debian, очевидно, имеет некоторые отличия от рабочей станции Debian, но функции все еще работают).
Так что в основном у меня есть «общая конфигурация», master
и (если говорить в терминах объектно-ориентированного программирования) она наследуется в мои ветви (которые также могут наследовать друг от друга).
Кроме того, git
механизмы «выбора вишен» (в данном случае изменения в / etc /) были весьма полезны для меня в тех случаях, когда мне нужны были только части определенной конфигурации.
Теперь к некоторым из ваших идей:
- Если бы мне потребовалась дополнительная интеграция с менеджером пакетов, я бы использовал для этого сценарии-оболочки (на данный момент я не использую).
- обращение с версиями выше по течению, как с веткой, будет работать нормально
git
, это просто еще одна ветка, в которую вы иногда сливаетесь (частично)master
- Список игнорирования в git - это файл .gitignore в вашем репо, так что он покрыт.