2009-09-11 9 views
35

Normalmente trabajo en varias computadoras. Tengo varios archivos de configuración, por ejemplo, .bashrc, .gitconfig, .irbrc, .vimrc y carpetas de configuración, por ejemplo, .vim/ que contienen personalizaciones valiosas. A veces deseo pequeñas variaciones en la configuración entre las diferentes computadoras.Administración de archivos de configuración de usuario en varias computadoras

Quiero usar el control de versiones para administrar estos archivos diferentes.

  • ¿otros usan control de versiones para administrar sus archivos de configuración?
  • ¿Cuáles son algunos consejos que pueden hacer esto más fácil?
  • ¿Cuál es la forma más elegante de manejar las variaciones entre las computadoras?
  • Me siento cómodo con git; ¿cualquier otra sugerencia?
+6

mira por dónde Sí, la gente usa el control de revisión para archivos de configuración. Lo veo especialmente para los archivos de configuración del administrador de ventanas, pero solo haz una búsqueda en "config" para ver lo que obtienes. –

Respuesta

14

Por el momento, utilizo un repo de git clonado. Para mantener las cosas simples, el único archivo que necesita variar entre las diferentes máquinas es .bashrc. Es bueno si solo puede haber una versión de este archivo que responda de manera diferente en diferentes máquinas. Por lo tanto, en mi .bashrc:

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

Esto, obviamente, tiene algunas limitaciones (como una técnica diferente que se requeriría para .vimrc u otros archivos de configuración que necesitan personalización), pero funciona bastante bien.

+3

archivo .bashrc.local en cada máquina y puede fuente que .bashrc.local través archivo .bashrc común. .bashrc.local tendrá una personalización específica para esa máquina (como el color). – vaichidrewar

1

git con ramas para computadoras personalizadas, con sincronización automática al iniciar sesión parece una buena solución para mí.

He utilizado etckeeper para las configuraciones de versiones, pero nunca me he expandido a las configuraciones de usuario.

2

Si usa git, puede definir un repo de "origen" para ser el maestro; y luego haz un clon en cada computadora que trabajas. podría usar una rama para que cada computadora tenga su conjunto de archivos de configuración.

3

¡Con CfEngine puede gestionar archivos de configuración en varias máquinas y también hacer muchas cosas más! La curva de aprendizaje es quizás un poco alta, pero vale la pena si tiene que administrar/actualizar/mantener un grupo de computadoras que ejecutan Linux regularmente.

+0

1 para esto también http://en.wikipedia.org/wiki/Cfengine –

+0

O marioneta, cocinero, Bcfg2 y [otros] (http://en.wikipedia.org/wiki/Comparison_of_open_source_configuration_management_software). Usted puede tener – Bash

1

Este tipo de pregunta surge ocasionalmente, y nunca he visto una herramienta para manejar este caso de uso común, así que escribí un script que usa git y enlaces simbólicos para administrar estos archivos.

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

No es perfecto. Actualmente hay un error relacionado con el manejo de directorios, y todavía no hay soporte para variaciones en las computadoras.

¡Antes de utilizar cualquier herramienta de esta naturaleza, asegúrese de tener buenas copias de seguridad!

+1

explique en los comentarios cuando Downvote – user89021

17

Guardo una carpeta en ~/config/ que es un repositorio de bzr. Empujo/tiro el repositorio entre mis varias computadoras para sincronizarlo.una He script de instalación que utilizo para crear enlaces simbólicos al directorio principal:

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

Si desea utilizar git en lugar de bzr, en su lugar puede utilizar:

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

(tuve que ask SO para darse cuenta de eso)

EDIT: yo en realidad no seguir haciendo esto, ahora tengo un acuerdo de recompra dotfiles en github, con un buen rastrillo script de instalación que otra persona escribió.

+0

1 o menos lo mismo que yo –

+0

Gracias. el repositorio dotfiles es muy útil. – Shuo

+0

¿Cuál es el beneficio del script de instalación de rake en comparación con el script de bash anterior? ¿Y hay una diferencia entre tener un repositorio bzr y un repositorio dotfiles en github? Suena como la misma solución, excepto que solo estás usando git vs bzr, y una secuencia de comandos de instalación diferente ahora? –

2
+1

+1. Yo uso Dropbox también. También me desplazo a través de múltiples sistemas operativos, por lo que la mayoría de los archivos de configuración en Dropbox tienen una extensión para indicar el sistema operativo en el que se crearon. Si ambos entornos son iguales, puedo vincular al mismo archivo independientemente de la extensión. Por ejemplo, tengo un enlace simbólico .profile que apunta a ~/Dropbox/config/bash/profile.osx. En mi cuadro de Linux, apunta a ~/Dropbox/config/bash/profile.lin. –

2

Uso slack para una situación similar. holgura permite la definición de roles/subroles para que pueda administrar archivos con pequeñas variaciones, ya sea a través de un archivo clonado o parche. El directorio slack es luego administrado por git en mi implementación.

+0

Uso flojo mucho. Es liviano y rápido y no se interpone en el camino. Funciona muy confiable aquí. – user89021

1

creo que lo que quiere podría ser similar a lo que he estado haciendo ...

hacer un directorio en el hogar llamado .host_configs/. Esta es una versión controlada. O en mi caso, que vive en una carpeta especial en una computadora central, lo guardo en cualquier máquina nueva. Dentro, haga una carpeta para cada host para el que desee configuraciones diferentes. La carpeta para cada host debe nombrarse después del nombre de host corto para esa máquina. Así que en su repositorio git tiene:

.host_configs/ 
      homecomp1/ 
      girlfriendcomp1/ 
      workcomp1/ 
      workcomp2/ 

En cada carpeta específica anfitrión, poner el .vimrc, .irbrc, etc., los archivos de configuración para ese cuadro específico. Y también, en cada carpeta de host hacer un archivo llamado .[SHORT_HOST]_rc. Por ejemplo, si su máquina tiene un nombre "sano", tenga un archivo llamado .sane_rc ... Este archivo contendrá las líneas que normalmente estarían en .bashrc que son exclusivas de ese host. Por ejemplo, si es un mac y necesita alias ls='ls -GF' en lugar de alias ls='ls --color=auto' que funciona para la mayoría de las máquinas nix para ls con colores, ponga esa línea en el .[SHORT_HOST]_rc para esa máquina, junto con las funciones especiales, declaraciones, etc. que normalmente entrarían en el .bashrc o .profile, etc. (o .zshrc, .tschrc, según sea el caso). Por lo que la versión controlada ~/.host_configs/ carpeta se parece a:

.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 

utilizo de todos modos $ barebones HOME/.bashrc (o ~/.tshrc etc) en todas mis máquinas. Simplemente tomo el básico que viene con la distribución en cuestión y muevo toda la configuración específica del host al archivo .host-configs/[SHORT_HOST]/.[SHORT_HOST]_rc.

poner esto en la parte inferior (de $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 

(Encuentra todas las empresas punto-archivos para el anfitrión y hace un enlace simbólico en el hogar de la carpeta ~/.host_configs/foo_host). Sus archivos dot están en su ubicación normal pero están enlazados simbólicamente al control de versión. Lo anterior también genera todas las líneas en su archivo [$SHORT_HOST]_rc en .bashrc

Puede volver a comprometerse con git desde la carpeta ~/.host_configs/ cada vez que tenga cambios.

Eso es lo que parece en shell, que es probablemente todo lo que necesita, pero si necesita otras características, escribiría algo que use los mismos principios (obteniendo un archivo .rc externo en .bashrc y enlazando todas las configuraciones archivos a la carpeta de control de versión estructurada) en algo más versátil/menos feo que el shell. Así que en lugar de la anterior en su .bashrc, podría ser:

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

... y escribir su import_conf.rb hacer gestión conf más complejas, como la colocación de un archivo de configuración específico en algún directorio fuera de la casa, o manejando una carpeta config como .ssh /, .subversion/etc. Eso es lo que hago, es bastante elegante para mí, pero puede haber mejores soluciones. Dropbox con algunos enlaces simbólicos creativos también es una excelente idea, aunque confíe en un tercero y necesita estar en un entorno gráfico. También tenga en cuenta que hay inconsistencias entre lo que puede hacer con enlaces simbólicos + Dropbox en Linux y atajos + Dropbox en Windows si se implementa algo que quiere jugar con Windows.

0

Ahora hay también vcsh

es del README:

VCSH - gestionar archivos de configuración en $ HOME a través de repositorios Git desnudos falsos

[...]

VCSH le permite tener varios repositorios Git, todo el mantenimiento de sus árboles de trabajo en $ HOME sin luchando entre sí. Eso, a su vez, significa que puede tener un repositorio por conjunto de configuración (zsh, vim, ssh, etc.), seleccionando y eligiendo qué configuraciones desea usar en cada máquina.

funciona perfectamente, pero puede ser un poco complicado si no eres un usuario experimentado git.

2

Éstos son algunos gerentes dotfile:

  • homesick: Basado en Rubí
  • homeshick: Igual que la primera, pero sin dependencia de rubí
  • dfm: Escrito en Perl
Cuestiones relacionadas