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

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

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

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


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

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

В качестве примера приведу репо с моими настройками, алиасы в aliases.sh, функции, как несложно догадаться, в functions.sh.

alias md='mkdir -p'
alias h='history'
alias j='jobs -l'
alias which='type -a'
...

А вот как выглядит ~/.bashrc на моих серверах. Клон репо находится в ~/etc/bash-ext.

# Include gloablly defined aliases and functions
source ~/etc/bash-ext/aliases.sh
source ~/etc/bash-ext/functions.sh

__define_colors
__set_prompt
...

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

Плюсы

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

Минусы

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

Tags: , , , , ,

  • http://coderoid.livejournal.com/ coderoid

    А почему не положить эти файлы на dropbox какой нибудь, который подключается как папка и синхронизируется… тогда хватит просто source.

  • http://twitter.com/heregoeswoes should be a name

    [-] версионность
    [-] бранчи
    [-] command line interface