Это хорошая идея использовать git для контроля версий файла конфигурации?

18

Я использую Gentoo Linux, и он имеет довольно сложную конфигурацию. Мой вопрос: разумно ли использовать git для контроля версий моих файлов конфигурации?

У меня дома есть несколько репозиториев git, я думаю, если я добавлю / home / ** к моему .gitignore, они не вызовут проблем.

Уточнение обновления:

Разумно ли использовать git для контроля версий файлов конфигурации моего системного уровня в корневом каталоге "/"?

atevm
источник
@AnthonyGeoghegan Я хочу отследить мой корневой каталог "/", что может привести к интересным последствиям в будущем, поэтому связанная ветка лишь частично ответит на мой вопрос. Другая часть: разумно ли использовать git для управления версиями моих конфигурационных файлов до сих пор без ответа
atevm
1
@AnthonyGeoghegan спасибо. Я обновил вопрос.
atevm

Ответы:

19

Краткий ответ на ваш вопрос: да .


Я без колебаний рекомендую Git (или любое другое программное обеспечение для контроля версий) отслеживать файлы конфигурации. С тех пор я стал более продуктивным (в частности, для настройки новых установок) и больше доверял своим файлам конфигурации. С контролем версий у меня есть запись о том, какие изменения были внесены, и сообщение о фиксации предоставляет причину, по которой было сделано изменение. Если изменение имеет непреднамеренные побочные эффекты, я могу легко просмотреть журнал / историю, чтобы увидеть, какие изменения вызвали эффекты.

Лично я бы с осторожностью отслеживал все файлы в /корневом каталоге. Список игнорируемых путей может стать большим и громоздким. Я предпочитаю хранить каждый логический набор файлов в своем собственном хранилище.

Я вручную использую Git для отслеживания моих личных файлов конфигурации / запуска, например, конфигурации Vim, функций Bash, псевдонимов и т. Д. - аналогично подходу, описанному в разделе Как отслеживать $ HOME с помощью git . Я храню каждый набор файлов в своем собственном хранилище и использую символические ссылки на домашний каталог.

Для файлов конфигурации системы я использую Git с Etckeeper для отслеживания файлов в моем /etcкаталоге.

Недостатки

Одна проблема, которую следует опасаться, - это то, что отслеживаемые файлы содержат жесткие ссылки . Когда Git используется для извлечения файлов или иного изменения рабочего дерева, он отменяет связь с файлами и затем воссоздает их . Смотрите Git, Dotfiles и Hardlinks для более полного объяснения.

Etckeeper

Etckeeper может использоваться для ведения полной истории изменений, внесенных в / etc. Он отслеживает метаданные файлов, которые системы контроля версий обычно не поддерживают, но это важно /etc, например, права доступа /etc/shadow.

Он подключается к менеджерам пакетов, таким как apt и yum и (в конфигурации по умолчанию), запускает до и после установки, поэтому все изменения /etcотслеживаются.

Если пакет установлен или удален, все незафиксированные изменения в / etc будут зафиксированы перед операцией пакета, так что есть две фиксации:

  1. «Сохранение незафиксированных изменений в / etc до запуска yum»
  2. «Внесение изменений в / etc после запуска yum»

Я использовал его с дистрибутивами на основе Debian и Red Hat и знаю, что он поддерживает управление пакетами Arch. Я не могу сказать, сколько автоматизации это добавит к системе Gentoo, но пакет для нее доступен .

Он также поддерживает передачу файлов конфигурации в удаленный репозиторий (который, разумеется, должен быть закрытым).

конфигурация

После установки пакета вам может понадобиться настроить его ( /etc/etckeeper/etckeeper.conf), например, в системах Ubuntu система управления версиями по умолчанию изменена с Git на Bazaar. Вы также можете отключить ежедневные автоматические коммиты .

Ежедневные автокоммиты

Изменения могут быть автоматически зафиксированы ежедневным заданием cron . Это может раздражать, так как хранилище может быть загромождено несколькими сообщениями автоматической фиксации.

Я раскомментирую соответствующую строку в /etc/etckeeper/etckeeper.conf:

sed -i '/AVOID_DAILY_AUTOCOMMITS/s|^#* *||' /etc/etckeeper/etckeeper.conf

Игнорировать определенные файлы

Изменить, /etc/.gitignoreчтобы указать любые файлы, которые не должны быть отслежены.

Первый забег

После настройки выполните следующие команды:

sudo etckeeper init
sudo etckeeper commit "Initial commit"

Если ваш текущий каталог etc, вы можете запускать обычные gitкоманды, например,

sudo git status
sudo git log
Энтони Дж - справедливость для Моники
источник
1
Вау, это было очень полезно и подробно ... спасибо :)
atevm
Просто чтобы обновить очень хорошо написанный ответ: etckeeperво время ежедневной фиксации сначала проверяется, /etcявляется ли он «нечистым», то есть у него есть незафиксированные файлы. Если нет, он не будет совершать. Так что, если ваш журнал коммитов полон ежедневных коммитов, есть вероятность, что ежедневно изменяются файлы, которые вы не добавили в .*ignoreфайл :-)
pepoluan
Кроме того, в Ubuntu эта утомительная тенденция состоит в немедленном выполнении bzr init--__-- ... Я рекомендую всегда запускаться etckeeper uninit -fпосле установки.
pepoluan
Обратите внимание, что etckeeper больше не размещается на github. Теперь они используют свою собственную систему на своей домашней странице. Вероятно, некоторое неприятие M $ на стороне автора. Лично я считаю это неудачным решением, так как теперь вы не можете легко сообщать о проблемах и не видите, насколько популярен проект.
Михаэль Хертл
Спасибо @ MichaelHärtl Я удалил устаревшую ссылку на репозиторий GitHub.
Энтони Дж - правосудие для Моники
3

Я использую git для отслеживания определенных областей моего домашнего каталога. Лично я бы не пошел по пути отслеживания корневого каталога, но должен сказать, что восхищаюсь вашими амбициями. :)

Возможно, этот набор опыта может дать вам лучшее представление о том, что вы можете получить в:

влияние инициализации git-репозитория на корневой каталог linux 3 :)

Извиняюсь за «ответ», вместо того, чтобы просто кинуть ссылку в комментарии; однако, недостаточно реп, но хотел бы присоединиться.

редактировать

Вот это да! Очень хороший ответ @AnthonyGeoghegan. Я верю, что это не столько борьба, сколько я изначально предполагал.

Майкл Стилсон
источник
0

Я также использую, gitчтобы хранить и поддерживать мой dotfiles, но в git bare repository. Подробное руководство можно найти здесь . Я использую два репозитория, один для именованных точечных файлов моих пользователей myconfи один для названных точечных файлов root rootconf.

Кроме того, вы можете использовать обе конфигурации на многих машинах, на разных дистрибутивах Linux или на виртуальных машинах: просто создайте новую ветку для отдельной конфигурации. Тогда вы избегаете смешивать код в одном и том же файле (например .bash_alias): не раздражает, если проверять текущий компьютер; нет ссылки не нужны!

Крис
источник