Подтвердить что ты не робот

Управление конфигурационными файлами пользователей на нескольких компьютерах

Я обычно работаю на нескольких компьютерах. У меня есть различные файлы конфигурации, например .bashrc, .gitconfig, .irbrc, .vimrc и папки конфигурации, например .vim/, содержащие ценные настройки. Иногда мне нужны небольшие изменения в конфигурации между разными компьютерами.

Я хочу использовать управление версиями для управления этими разными файлами.

  • Другие используют управление версиями для управления файлами конфигурации?
  • какие подсказки могут сделать это проще?
  • Какой самый элегантный способ иметь дело с изменениями между компьютерами?
  • Мне нравится git; любые другие предложения?
4b9b3361

Ответ 1

В настоящий момент я использую клонированное репо git. Чтобы все было просто, единственный файл, который должен отличаться между разными машинами, - .bashrc. Это хорошо, если может быть только одна версия этого файла, которая по-разному реагирует на разные машины. Таким образом, в моем .bashrc:

if [ $(hostname) == 'host1' ]; then
     # things to do differently on host1.
elif [ $(hostname) == 'host2' ]; then
     # things to do differently on host2.
fi

Это, очевидно, имеет некоторые ограничения (например, для .vimrc или других файлов конфигурации, требующих настройки) потребуется другой метод, но он работает достаточно хорошо.

Ответ 2

Я сохраняю папку в ~/config/, которая является репозиторием bzr. Я нажимаю/вытаскиваю репозиторий между моими различными компьютерами, чтобы синхронизировать его. У меня есть установка script, которую я использую для создания символических ссылок в моем домашнем каталоге:

#! /bin/sh
# link all files to the home directory, asking about overwrites
cd `dirname $0`
SCRIPT_DIR=`pwd`
SCRIPT_NAME=`basename $0`
FILES=`bzr ls --versioned --non-recursive`

cd $HOME
for FILE in $FILES; do
    ln --symbolic --interactive $SCRIPT_DIR/$FILE
done
rm $TARGET_DIR/$SCRIPT_NAME

Если вы хотите использовать git вместо bzr, вы можете использовать:

FILES=`git ls-tree --name-only HEAD`

(мне пришлось спросить SO, чтобы понять это)

EDIT: Я больше этого не делаю, теперь у меня есть dotfiles repo on github, с хорошей установкой rake install script, которую написал кто-то другой.

Ответ 3

С CfEngine вы можете управлять конфигурационными файлами на машинах и делать еще много вещей! Кривая обучения может быть немного высокой, но стоит того, если вам нужно регулярно управлять/обновлять/поддерживать пул компьютеров, работающих под управлением Linux.

Ответ 4

Если вы используете git, вы можете определить репозиторий "origin", чтобы стать мастером; а затем сделать клон на каждом компьютере, на котором вы работаете. вы можете использовать ветку для каждого компьютера, чтобы иметь свой набор файлов конфигурации.

Ответ 6

Я использую slack для аналогичной ситуации. slack позволяет определять роли/подстроки, чтобы вы могли управлять файлами с небольшими вариациями либо через клонированный файл, либо патч. В этом случае каталог slack управляется git в моем развертывании.

Ответ 7

Вот несколько диспетчеров точечных файлов:

  • homesick: на основе Ruby
  • homeshick: тот же, что и первый, но без зависимости от рубины
  • dfm: написано на Perl

Ответ 8

git с ветвями для пользовательских компьютеров, с автоматической синхронизацией при входе в систему, кажется хорошим решением для меня.

Я использовал etckeeper для конфигураций версий, но я никогда не расширялся до пользовательских конфигураций.

Ответ 9

Этот вопрос возникает иногда, и я никогда не видел инструмент для обработки этого распространенного варианта использования, поэтому я написал script, который использует git и символические ссылки для управления этими файлами.

См. http://github.com/bstpierre/dotfiles

Это не идеально. В настоящее время существует ошибка, связанная с обработкой каталогов, и пока нет поддержки для разных компьютеров.

Прежде чем использовать какой-либо инструмент такого рода, убедитесь, что у вас есть хорошие резервные копии!

Ответ 10

Я думаю, что вы хотите быть похожим на то, что я делал...

Создайте каталог дома .host_configs/. Это версия контролируется. Или в моем случае он живет в специальной папке на центральном компьютере, я отскакиваю ее на любую новую машину. Внутри он создает папку для каждого хоста, для которой вы хотите разные конфигурации. Папка для каждого хоста должна быть названа в честь короткого имени хоста для этой машины. Поэтому в вашем репозитории git у вас есть:

.host_configs/
           homecomp1/
           girlfriendcomp1/
           workcomp1/
           workcomp2/

В каждой конкретной папке хоста поместите файлы конфигурации .vimrc,.irbrc и т.д. для этого конкретного окна. А также в каждой папке хоста создайте файл с именем .[SHORT_HOST]_rc. Например, если на вашем компьютере "sane" есть файл с именем .sane_rc... Этот файл будет содержать строки, которые обычно находятся в .bashrc, которые являются уникальными для этого хоста. Например, если это mac и ему требуется alias ls='ls -GF' вместо alias ls='ls --color=auto', который работает для большинства машин nix для ls с цветами, поместите эту строку в .[SHORT_HOST]_rc для этой машины вместе с любыми специальными функциями, объявлениями и т.д., которые обычно попадают в .bashrc или .profile и т.д. (или .zshrc,.tschrc, в зависимости от обстоятельств). Таким образом, управляемая версией папка ~/.host_configs/ выглядит так:

.host_configs/
           homecomp1/
                    .homecomp1_rc        #special shell configs for this hostname
                    .vimrc               #you know the rest
                    .irbrc
                    .Xresources
           girlfriendcomp1/
                    .girlfriendcomp1_rc
                    .vimrc
                    .bubblebathrc
           workcomp1/
                    .workcomp1_rc
                    .bashrc
                    .vimrc
           workcomp2/
                    .workcomp2_rc
                    .bashrc
                    .vimrc

Я использую все те же баребоны $HOME/.bashrc(или ~/.tshrc и т.д.) на всех моих машинах. Я просто беру основной, который поставляется с дистрибутивом, и переместил всю конфигурацию, специфичную для хоста, в файл .host-configs/[SHORT_HOST]/.[SHORT_HOST]_rc.

Поместите это внизу (из $HOME/.bashrc):

export SHORT_HOST="sane"
for file in `find ~/.host_configs/$SHORT_HOST -name ".*"`
do
ln -s $file `basename $file`
done
source ~/`.$SHORT_HOST`_rc

(находит все точечные файлы для хоста и создает символическую ссылку в домашней папке ~/.host_configs/foo_host). Ваши файлы точек находятся в их нормальном расположении, но они привязаны к управлению версиями. Вышеуказанное также выводит все строки в вашем файле [$SHORT_HOST]_rc на .bashrc

Вы можете вернуться к git из папки ~/.host_configs/ всякий раз, когда у вас есть изменения.

Это то, что похоже на оболочку, что, вероятно, все, что вам нужно, но если вам нужны другие функции, я бы написал что-то, использующее те же принципы (поиск внешнего .rc файла в .bashrc и символическое связывание всех файлов конфигурации к папке управления структурированной версией) в чем-то более универсальном/менее уродливом, чем оболочка. Поэтому вместо приведенного выше в вашем .bashrc может быть:

export SHORT_HOST="sane"
ruby ~/import_conf.rb $SHORT_HOST

... и напишите import_conf.rb, чтобы выполнить более сложное управление conf, например, размещение определенного файла конфигурации в каком-либо каталоге, кроме дома, или обработку папки config, например .ssh/,.subversion/и т.д. Что я делаю, это довольно элегантно для меня, но могут быть лучшие решения. Dropbox с некоторыми креативными символическими ссылками также является отличной идеей, хотя вы полагаетесь на стороннюю сторону, и вам нужно быть в графической среде. Также обратите внимание, что существуют несоответствия между тем, что вы можете сделать с symlinks + dropbox в Linux и ярлыками + dropbox в Windows, если вы реализуете что-то, что хочет играть с Windows.

Ответ 11

Теперь есть vcsh

Из README:

vcsh - управлять конфигурационными файлами в $HOME через поддельные голые репозитории git

[...]

vcsh позволяет иметь несколько репозиториев git, поддерживая их рабочие деревья в $HOME без сближения друг с другом. Это, в свою очередь, означает, что вы можете иметь один репозиторий для каждого набора конфигурации (zsh, vim, ssh и т.д.), Выбор и выбор тех конфигураций, которые вы хотите использовать на какой машине.

Работает отлично, но может быть немного сложнее, если вы не опытный пользователь git.