Одна причина хранить конфиги в системе контроля версий

Пару дней назад я занимался тем, что читал .vimrc других программистов и тырил оттуда понравившиеся мне настройки. Скопировав много всякого из конфига небезызвестного Стива Лоша (Steve Losh), я радовался жизни, пока вдруг не обнаружил, что :edit (команда редактирования файла) больше не дополняет директории и мне приходится писать их названия по памяти. Естественно, такие регрессии мне совсем не по вкусу, так что нужно было как-то выяснить, какая же опция сломала любимую фичу. Если бы мой .vimrc не находился под управлением системы контроля версий, мне пришлось бы:

Но мой .vimrc таки лежит под Git, поэтому я сделал следующее:

cd docs/git/dotfiles
git log
git bisect start
git bisect good 53273d7a0d6ab7f61a00ad1a43b1008eb189640f
git bisect bad
git bisect good
git bisect reset
git show acdc994b492bf5933e9c0374bf70e0ada69a2231
vim .vimrc
git add .vimrc
git ci -m'vim: fix directory completion for :e'
git push

То есть вместо того, чтобы думать и вспоминать, я запустил git bisect и уже через пару минут знал, какой именно коммит поломал мне автодополнение.

Когда я коммитил правки, мне было лень разбивать их на атомарные коммиты, поэтому после bisect пришлось ещё немного поэкспериментировать, чтобы выяснить, что всё ломается из-за опции wildignore, но это уже мелочи.

Между cd в репозитой и финальным git push прошло меньше десяти минут. Если бы не Git, я бы потратил не меньше получаса. В общем, если у вас есть большие и ценные конфиги, очень советую положить их под СКВ — морока минимальна, а польза хоть и редка, но огромна.

Пользуясь случаем, рекламирую etckeeper — программу, которая будет хранить правки вашего /etc в Git, Mercurial, Darcs или Bazaar. Более того, благодаря хукам для aptitude (а также yum и pacman-g2) всё автоматизировано по самое не хочу: при любом install, remove или purge программа сначала закоммитит любые незакоммиченные правки (если вы ленитесь и сами этого не делаете), потом поставит/удалит пакеты и снова всё закоммитит (на случай, если пакеты что-то поменяли). То есть вам делать ничего не нужно, а возможность всё откатить и починить появляется. Приятно же!

Drop me a line! (wonder where’s the comments form?)