Использование github для хранения персональных настроек

Проблема унификации персональных настроек среды знакома каждому, кто работает на нескольких компьютерах. При работе в *nix/linux у каждого довольно быстро появляется свой любимый набор aliases, bash functions, prompts и переменных среды, которые облегчают работу. Не стоит забывать и о настройках других программ, таких, как vim, emacs или git.

По счастью, большая часть настроек хранится на *nix-системах в простых текстовых файлах и может быть легко скопирована на новый сервер. Однако, при росте количества серверов вы неизбежно сталкиваетесь с ограничениями такого подхода. Какую версию считать основной мастер-копией? Что, если в вашем парке несколько операционных систем и настройки разнятся от одной системы к другой? Что делать, наконец, если мастер-копию настроек возможно быстро скачать не на все сервера - скажем, она лежит на вашей основной рабочей машине в офисе компании за файрволлом?

Появление distributed version control systems, таких, как git и mercurial, вкупе с возможностью хостить свои персональные репозитории в облаках позволяет значительно уменьшить эти проблемы. Я воспользовался публичным хостингом на github, однако, если вы не хотите давать доступ к вашим настройкам - есть и другие варианты (например, unfuddle предлагает бесплатный приватный хостинг git и svn репо).

Последовательность действий:

  1. Зарегистрируйтесь на github.
  2. Создайте новый персональный репо для ваших настроек.
  3. Склонируйте его на ваш компьютер (git clone <url>).
  4. Отредактируйте ваши ~/.bashrc, ~/.vimrc и прочие файлы персональных настроек, вынеся оттуда универсальные aliases, функции и прочие общие настройки в отдельные файлы в вашем клоне репо.
  5. Включите универсальные настройки в ~/.bashrc.
  6. git add && git commit
  7. Клонируйте настройки на другие сервера и отредактируйте соответствующие .bashrc (как указано в пункте 6).

В качестве примера приведу репо с моими настройками.

Плюсы и минусы такого подхода

Плюсы

  • Копия настроек на каждой системе поднимается за минуты.
  • Возможность иметь историю изменений на каждой системе без необходимости доступа к центральному серверу (если вы используете ditributed version control system - git, hg, и так далее).
  • Возможность иметь кастомные версии настроек, скажем, для разных ОС или целей (git branch freebsd && git checkout freebsd…).
  • Возможность иметь универсальные настроки для команды или рабочей группы.

Минусы

  • Вам понадобится git (hg, svn, bazaar..) клиент на каждой машине. Впрочем, установка нужного пакета - дело нескольких минут.
comments powered by Disqus