Управление файлами конфигурации пользователя на нескольких компьютерах - PullRequest
36 голосов
/ 12 сентября 2009

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

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

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

Ответы [ 11 ]

17 голосов
/ 18 сентября 2009

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

#! /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`

(мне пришлось попросить ТАК выяснить это)

РЕДАКТИРОВАТЬ: На самом деле я больше этого не делаю, теперь у меня есть репо dotfiles на github, с хорошим сценарием установки рейка, который кто-то написал.

14 голосов
/ 15 сентября 2009

В данный момент я использую клонированное 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 или других файлов конфигурации, нуждающихся в настройке, потребуется другой метод), но оно работает довольно хорошо.

3 голосов
/ 15 сентября 2009

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

3 голосов
/ 12 сентября 2009

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

2 голосов
/ 23 июля 2013

Вот некоторые менеджеры dotfile:

2 голосов
/ 20 сентября 2009

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

2 голосов
/ 18 сентября 2009

Легко. Используйте DropBox для этого: http://www.nixtutor.com/linux/sync-config-files-across-multiple-computers-with-dropbox/

1 голос
/ 21 сентября 2009

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

Создайте в доме каталог с именем .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

Я использую все одинаковые barebone-файлы $ 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 для более сложного управления настройками, например, для размещения определенного файла конфигурации в каком-либо каталоге, кроме home, или для обработки папки конфигурации, такой как .ssh /, .subversion / и т.д. Это то, что я делаю Это довольно элегантно для меня, но могут быть и лучшие решения. Dropbox с некоторыми креативными символическими ссылками также является отличной идеей, хотя вы полагаетесь на третьих лиц и должны быть в графической среде. Также обратите внимание, что существуют несоответствия между тем, что вы можете сделать с символическими ссылками + dropbox в Linux и ярлыками + dropbox в Windows, если вы реализуете что-то, что хочет играть с Windows.

1 голос
/ 15 сентября 2009

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

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

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

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

1 голос
/ 12 сентября 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...