Управление конфигурационными файлами пользователей на нескольких компьютерах
Я обычно работаю на нескольких компьютерах. У меня есть различные файлы конфигурации, например .bashrc
, .gitconfig
, .irbrc
, .vimrc
и папки конфигурации, например .vim/
, содержащие ценные настройки.
Иногда мне нужны небольшие изменения в конфигурации между разными компьютерами.
Я хочу использовать управление версиями для управления этими разными файлами.
- Другие используют управление версиями для управления файлами конфигурации?
- какие подсказки могут сделать это проще?
- Какой самый элегантный способ иметь дело с изменениями между компьютерами?
- Мне нравится
git
; любые другие предложения?
Ответы
Ответ 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", чтобы стать мастером; а затем сделать клон на каждом компьютере, на котором вы работаете. вы можете использовать ветку для каждого компьютера, чтобы иметь свой набор файлов конфигурации.
Ответ 5
Легко. Используйте DropBox для этого:
http://www.nixtutor.com/linux/sync-config-files-across-multiple-computers-with-dropbox/
Ответ 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.