Это фантастика!
Тот, кто этого никогда не пробовал, просто не поймёт этого кайфа. Трудно передать словами ощущения — как будто после долгих лет, прожитых во тьме, я вышел на яркий солнечный свет и едва не ослеп. Долгие годы я боролся с хаосом, который надвигался со всех сторон, и наконец-то нашёл верное средство.
Как же я мог раньше жить без Subversion'а! Каждое изменение в каждом файле было необратимым. Я ничего не имею против аккуратности и осторожности, но… это всё равно что проходить Doom без сохранений! Теперь я при малейшем шорохе делаю svn commit и иду дальше.
Долгий путь во тьме
У меня большой домашний каталог. Если не считать медиа-архив (фильмы, клипы, музыка и фотографии), то останутся сотни тысяч файлов суммарным объёмом в десятки гигабайт. Это очень много, на самом-то деле. Современные накопители позволяют хранить большие объёмы данных, современные файловые системы прощают нам многое — но в этом море информации легко утонуть.
Я пережил много потерь данных и с тех пор храню «на всякий случай» больше, чем следовало бы. Старые проекты, рабочие файлы, какие-то исходники, записки, заметки, контакты, интересные идеи, прикольные картинки, присланные кем-то файлы, скрипты, чат-логи, наброски дизайна, архивы почты — очень много файлов. Сам чёрт ногу сломит в том, что у меня хранилось. Я не хочу удалять всё, что не понадобилось в течении долгого времени: неоднократно бывали ситуации, когда мне потребовался, к примеру, какой-то файл 10-летней давности (и я его даже находил). Беда в том, что этот хаос рос и увеличивался в объёме, несмотря на регулярные попытки разгрести его.
Все те мерзости, (см. яркие примеры), которые отравляют жизнь программистам, в полной мере применимы и к домашнему каталогу. Дублирование данных в надежде избежать потерь — пожалуй, это и есть корень зла. Попытка пройти Doom без сохранений.
Технические моменты
Сначала стоит продумать структуру репозитария. Я начал миграцию с пустого домашнего каталога, в который постепенно добавлял старые файлы и настройки программ. Среди прочего в Subversion попали настройки моего рабочего стола. Через пару дней возни с этим всем стало можно жить. Через неделю я уже не мог без этого жить.
Мне здорово помогли «соглашения» — я принял несколько простых правил по поводу того, как на этот раз организовать домашний каталог. В частности, я решил, что у меня всё будет в UTF-8, что файлы будут в ASCII и в нижнем регистре, что в корне домашнего каталога все подкаталоги будут начинаться на разные буквы (чтобы удобнее работало автодополнение). cd aTab Такие идеи сами по себе хороши, но в сочетании с возможностью проводить рефакторинг они становятся по-настоящему эффективны.
В качестве транспорта у меня применяется svn+ssh. Как следствие, в svn:ignore надо занести ~/.ssh и ~/.subversion, иначе конфликты неизбежны. Вообще солидная порция дот-файлов у меня живёт в отдельном проекте, который я подключаю через svn:external и симлинки.
Изначально предполагалось, что я могу быстро развернуть свой десктоп на любой свежеустановленной linux-системе одной командой. Это удалось в полной мере: довольно долгое время я поддерживал идентичную рабочую среду на двух разных хостах. В какой-то момент я понял, что мой ноутбук — это всего лишь интерфейс к домашнему каталогу. Ощущение свободы и защищённости, которые я испытал при этом, трудно выразить словами.
С чего начать?
Новичкам я такого не посоветую. Нужно быть опытным пользователем Subversion'а и, конечно же, обитать в Unix-подобной OS. А тем, у кого необходимые знания есть — желаю удачи! Надеюсь, ваш опыт будет положительным.