Zarządzanie plikami konfiguracyjnymi użytkowników na wielu komputerach

Zwykle pracuję na wielu komputerach. Mam różne pliki konfiguracyjne, np, .bashrc, .gitconfig, .irbrc, .vimrc i foldery konfiguracyjne, np. .vim/, które zawierają cenne modyfikacje. Czasami chcę małe różnice w konfiguracji między różnymi komputerami.

Chcę używać kontroli wersji do zarządzania tymi różnymi plikami.

  • czy inni używają kontroli wersji do zarządzania plikami konfiguracyjnymi?
  • jakie są wskazówki, które mogą sprawić, że to łatwiej?
  • Jaki jest najbardziej elegancki sposób radzenia sobie z różnicami między komputerami?
  • podoba mi się git; jakieś inne sugestie?
Author: Peter, 2009-09-12

11 answers

Przechowuję folder w ~/config/, który jest repozytorium bzr. Wciskam / ciągnę repozytorium między różnymi komputerami, aby je zsynchronizować. Mam skrypt instalacyjny, którego używam do tworzenia dowiązań symbolicznych do mojego katalogu domowego:

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

Jeśli chcesz użyć git zamiast bzr, możesz zamiast tego użyć:

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

(musiałem poprosić więc , aby to rozgryźć)

EDIT: już tego nie robię, teraz mam dotfiles repo na GitHubie, z ładnym skryptem rake install, który ktoś inny napisał.

 17
Author: Christian Oudard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:29:36

W tej chwili używam sklonowanego git repo. Aby wszystko było proste, jedynym plikiem, który musi się różnić między różnymi maszynami jest .bashrc. Fajnie, że może być tylko jedna wersja tego pliku, która reaguje inaczej na różnych maszynach. Tak więc w moim .bashrc:

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

To oczywiście ma pewne ograniczenia (takie jak to, że inna technika byłaby wymagana dla .vimrc lub innych plików konfiguracyjnych wymagających dostosowania), ale działa dość dobrze.

 14
Author: Peter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-24 07:57:16

Z CfEngine możesz zarządzać plikami konfiguracyjnymi na różnych maszynach i robić wiele innych rzeczy! Krzywa uczenia się jest może trochę wysoka, ale warto, jeśli musisz zarządzać/aktualizować / utrzymywać pulę komputerów z systemem linux regularnie.

 3
Author: jdehaan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-14 21:40:53

Jeśli używasz Gita, możesz zdefiniować repo "origin" jako master; a następnie wykonać Klon na każdym komputerze, na którym pracujesz. możesz użyć gałęzi dla każdego komputera, aby mieć zestaw plików konfiguracyjnych.

 2
Author: faboolous,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-11 20:25:38
 2
Author: Vladislav Rastrusny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-18 07:39:20

Używam slack do podobnej sytuacji. slack umożliwia definiowanie ról/podroli, dzięki czemu można zarządzać plikami z niewielkimi zmianami za pomocą sklonowanego pliku lub poprawki. Katalog slack jest następnie zarządzany przez git w moim wdrożeniu.

 2
Author: phsiao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-20 16:43:18

Oto kilka menedżerów dotfile:

 2
Author: Khashayar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-23 12:57:04

git z Oddziałami dla niestandardowych komputerów, z automatyczną synchronizacją przy logowaniu wydaje mi się dobrym rozwiązaniem.

I ' ve used etckeeper do konfiguracji wersji, ale nigdy nie rozszerzyłem się do konfiguracji użytkowników.

 1
Author: Ben S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-11 20:22:08

Tego rodzaju pytanie pojawia się sporadycznie i nigdy nie widziałem narzędzia do obsługi tego typowego przypadku użycia, więc napisałem skrypt, który używa Gita i dowiązań symbolicznych do zarządzania tymi plikami.

Zobacz http://github.com/bstpierre/dotfiles

To nie jest idealne. Obecnie występuje błąd związany z obsługą katalogów i nie ma jeszcze wsparcia dla zmian na różnych komputerach.

Przed użyciem jakiegokolwiek narzędzia tego rodzaju, upewnij się, że masz dobre kopie zapasowe!

 1
Author: bstpierre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-15 14:52:32

Myślę, że to, czego chcesz, może być podobne do tego, co robię...

Stwórz katalog w domu o nazwie .host_configs/ . Jest to wersja kontrolowana. Albo w moim przypadku mieszka w specjalnym folderze na centralnym komputerze, scp go na każdej nowej maszynie. Wewnątrz niego utwórz folder dla każdego hosta, dla którego chcesz mieć różne konfiguracje. Folder dla każdego hosta powinien być nazwany po krótkiej nazwie hosta dla tego komputera. Więc w Twoim Git repo masz:

.host_configs/
           homecomp1/
           girlfriendcomp1/
           workcomp1/
           workcomp2/

W poszczególnych hostach folder, włóż .vimrc,irbrc itp., pliki konfiguracyjne dla tego konkretnego pola. A także, w każdym folderze host Utwórz plik o nazwie .[SHORT_HOST]_rc. Na przykład, jeśli twój komputer ma nazwę "sane", miej plik o nazwie .sane_rc ... Ten plik będzie zawierał wiersze, które normalnie by się znajdowały .bashrc, które są unikalne dla tego hosta. Na przykład, jeśli jest to mac i potrzebuje alias ls='ls -GF' zamiast alias ls='ls --color=auto', który działa dla większości maszyn nix dla {[8] } z kolorami, umieść tę linię w .[SHORT_HOST]_rc dla tej maszyny, wraz z czymkolwiek Funkcje specjalne, deklaracje itp., które normalnie trafiałyby dobashrc lub .profil itp. (lub .zshrc,tschrc, w zależności od przypadku). Tak więc folder kontrolowany ~/.host_configs/ wygląda następująco:

.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

Używam wszystkich tych samych barebones $HOME/.bashrc (lub ~/.tshrc itp.) na wszystkich moich maszynach. Po prostu biorę podstawową konfigurację dostarczaną z daną distro i przenoszę całą konfigurację specyficzną dla hosta do pliku .host-configs/[SHORT_HOST]/.[SHORT_HOST]_rc.

Umieścić to na dole (z $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

(Znajduje wszystkie pliki kropkowe dla hosta i tworzy dowiązanie symboliczne w domu do folderu ~/.host_configs/foo_host). Twoje pliki dot znajdują się w normalnej lokalizacji, ale są połączone symbolicznie z kontrolą wersji. Powyższe źródła również wszystkie linie w pliku [$SHORT_HOST]_rc do .bashrc

Możesz zatwierdzić z powrotem do git z folderu ~/.host_configs/ za każdym razem, gdy masz zmiany.

Tak to wygląda w shell ' u, czyli chyba wszystko czego potrzebujesz, ale jeśli potrzebujesz innych funkcji, napiszę coś, co korzysta z tych samych zasad (pozyskiwanie zewnętrznegoplik rc do .bashrc i symlinkowanie wszystkich plików konfiguracyjnych do folderu structured version control) w czymś bardziej uniwersalnym/mniej brzydkim niż powłoka. Więc zamiast powyższego w Twoim .bashrc, może być:

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

...i napisz swój import_conf.rb do bardziej skomplikowanego zarządzania konfiguracją, jak umieszczenie określonego pliku konfiguracyjnego w jakimś katalogu oprócz home, lub Obsługa folderu config jak .ssh/,subversion / etc. To to, co robię, jest dla mnie dość eleganckie, ale mogą być lepsze rozwiązania. Dropbox z niektórymi kreatywnymi dowiązaniami symbolicznymi to również doskonały pomysł, chociaż polegasz na stronie trzeciej i musisz być w środowisku graficznym. Zauważ również, że istnieją niespójności między tym, co możesz zrobić z dowiązaniami symbolicznymi + dropbox w Linuksie i skrótami + dropbox w systemie Windows, jeśli zaimplementujesz coś, co chce grać z systemem Windows.

 1
Author: Purrell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-12 01:19:50

Teraz jest też vcsh

Z README:

vcsh-Zarządzanie plikami konfiguracyjnymi w $HOME za pomocą fałszywych repozytoriów Git

[...]

vcsh pozwala na posiadanie kilku repozytoriów Gita, wszystkie utrzymujące swoje drzewa robocze w $HOME bez zatykania się nawzajem. To z kolei oznacza, że możesz mieć jedno repozytorium na zestaw konfiguracji( zsh, vim, ssh itp.), wybierając i wybierając konfiguracje, których chcesz użyć maszyna.

Działa idealnie, ale może być nieco zniechęcające, jeśli nie jesteś doświadczonym użytkownikiem Gita.

 0
Author: sleepyMonad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-09 09:19:24