Одна причина хранить конфиги в системе контроля версий
Пару дней назад я занимался тем, что читал .vimrc
других программистов и тырил
оттуда понравившиеся мне настройки. Скопировав много всякого из
конфига небезызвестного Стива Лоша (Steve
Losh), я радовался жизни, пока вдруг не обнаружил, что :edit
(команда редактирования файла) больше не дополняет директории и мне приходится
писать их названия по памяти. Естественно, такие регрессии мне совсем не по
вкусу, так что нужно было как-то выяснить, какая же опция сломала любимую фичу.
Если бы мой .vimrc
не находился под управлением системы контроля версий, мне
пришлось бы:
- подумать, какие именно опции могут влиять на автодополнение (учитывая, что Vim — не самый простой редактор, и я всё ещё далёк от постижения всех его возможностей и особенностей, здесь я вполне мог бы додуматься до чего-то неправильного);
- вспомнить, что я менял в последнее время (прошла всего пара дней, но я за это
время столько раз читал
:help
и столько смотрел на чужие конфиги, что вспомнить сделанные мной правки было уже не так-то просто); - наконец, методом проб и ошибок выяснить, верны ли мои догадки, и всё починить.
Но мой .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
программа сначала закоммитит любые незакоммиченные правки (если вы ленитесь
и сами этого не делаете), потом поставит/удалит пакеты и снова всё закоммитит
(на случай, если пакеты что-то поменяли). То есть вам делать ничего не нужно,
а возможность всё откатить и починить появляется. Приятно же!
Your thoughts are welcome by email
(here’s why my blog doesn’t have a comments form)