¿Cómo mantener los "archivos de puntos" bajo control de versiones?

30

Etckeeper es una gran herramienta para realizar un seguimiento de los cambios en sus archivos de configuración /etc. Algunas cosas clave al respecto realmente se destacan. Se puede usar con una amplia variedad de VCS: git, mercurial, darcs o bzr. También realiza confirmaciones automáticas a diario y cada vez que instala, elimina o actualiza el paquete. También realiza un seguimiento de los permisos de archivos y los metadatos de propiedad del usuario / grupo.

También me gustaría mantener mis "archivos de puntos" en mi directorio de inicio bajo control de versión también, preferiblemente bazar. ¿Alguien sabe si existe una herramienta como etckeeper para este propósito?

Peor de los casos, me imagino que una tarea programada sencilla correr bzr add && bzr ciuna vez o dos veces al día junto con la adición ~/Documents, ~/Musicetc a la .bzrignore Cualquier persona que ya están haciendo algo similar con un guión?

Si bien preferiría el bazar, otras opciones podrían ser interesantes.

andrewsomething
fuente
44
Discusión relacionada en Unix Stack Exchange: consejos para poner ~ bajo control de fuente . No responde a su pregunta, pero puede proporcionar información útil de todos modos.
Gilles 'SO- deja de ser malvado'
1
Hay muchas herramientas para esto ahora. Consulte dotfiles.github.io en la sección " Utilidades de archivos de puntos de uso general".
Robin Green
@RobinGreen Si trabajaste en una respuesta adecuada, podría aceptarlo. bzrciertamente no es el camino a seguir en 2015.
andrewsomething

Respuestas:

7

No sabía si había algo que hiciera esto, así que preparé un código para lograr exactamente lo que quieres usando mi repositorio aquí: http://github.com/robertmassaioli/config-files

Tengo un archivo que dice dónde pertenecen todos los archivos y el programa generate_links simplemente los pone a todos allí. Si sabe lo que está haciendo y puede compilar algún código de Haskell, entonces es realmente simple y fácil. Aunque ten en cuenta que realmente fue hecho para mi uso personal.

Robert Massaioli
fuente
3
+1 para haskell! -1 para haskel! jajaja no pero realmente
Derek
Te escucho. Elegí Haskell porque lo estoy aprendiendo, puede o no ser el mejor idioma adecuado para el trabajo. :)
Robert Massaioli
3

Bueno, seguí adelante e hice esto manualmente hasta encontrar una mejor solución. Así que bien podría explicar lo que hice.

Primero hice un bzr init ~, pero lo siguiente que hice fue bzr ignore "*". Decidí que no quería mantener todo bajo control de versiones. Simplemente no valió la pena, especialmente cuando consideras que hay algunas cosas allí que realmente no deberías guardar en vcs como tus llaves. Entonces tuve que buscar bzr addlos archivos específicos que quería. También puede agregar excepciones a .bzrignore. Las expresiones regulares de Python también son útiles allí. Lo estoy manteniendo bastante delgado por ahora. Si todo va bien, podría agregar todo ~/.configy ~/.gconftambién.

También escribí un script rápido que ejecuto como un trabajo cron. Comprueba si los archivos han cambiado, y si es así, una confirmación automática:

#! /bin/bash

set -e

TIME=$(date)
STATUS=$(bzr status)

if [ -n "$STATUS" ]; then
    if [ -n "$1" ]; then
         bzr ci ~ -m "$1"
    else
        bzr ci ~ -m "Automatic commit on $TIME"
    fi
fi

exit
andrewsomething
fuente
Había seleccionado mi propia respuesta cuando publiqué esto por primera vez, pero decidí deshacer eso. Ciertamente no es la mejor respuesta para esta pregunta en 2015.
andrewsomething
2

Convertí todo mi ~directorio en un repositorio de Bazaar. El almacenamiento de metadatos no es un problema para los archivos en el directorio de inicio: todo es propiedad de la misma cuenta y grupo, y bzrya almacena el bit de ejecución.

Le agrego manualmente los archivos "interesantes" (no quiero, por ejemplo, que mi colección de música o el caché de Firefox estén bajo control de versión), pero si desea automatizar esto con un script, creo que es la solución simple de hacer bzr add && bzr cien directorios seleccionados o en la salida de un findcomando simplemente hará el trabajo.

Riccardo Murri
fuente
2

Mantengo mis archivos zsh y vim en git, pongo github, en diferentes repositorios:

para zsh, por ejemplo, creé ".zsh" y puse zshrc y zshenv en él, además de un script para vincular zshrc a ~ / .zshrc y zshenv a ~ / .zshenv, algo así.

while true
do
read -p "do you want to link zshenv to ~/.zshenv (Y/N)" yn
case $yn in
    [Yy]*) ln -s ~/.zsh/zshenv ~/.zshenv; break;;
    [Nn]*) break;;
    *) echo "please answer yes or no";;
esac
done

while true
do
read -p "do you want to link zshrc to ~/.zshrc (Y/N)" yn
case $yn in
    [Yy]*) ln -s ~/.zsh/zshrc ~/.zshrc; break;;
    [Nn]*) break;;
    *) echo "please answer yes or no";;
esac
done

Así que hago

git clone git://git@github.com:tshirtman/.zsh
cd .zsh
./init.sh

para .vim, es casi lo mismo, excepto que uso submódulos para complementos, con patógenos, así que agregué eso en init.sh

git submodule init
git submodule update

y cuando quiero agregar un complemento vim, lo hago

git submodule add git://github.com/nathanaelkane/vim-indent-guides.git bundle/vim-indent-guides

por ejemplo.

ok, requeriría demasiado trabajo si tiene más de unos pocos directorios de puntos que desea administrar, pero nada le impide ponerlos todos en el mismo directorio, o separados por actividades (activado para todos los editores gráficos, uno para actividades web ...) más o menos. de todos modos, eso es lo que hice, así que solo mis dos centavos :).

tshirtman
fuente
1

Utilizo una solución que no es automática como etckeeper (tengo que confirmar manualmente), pero me ha funcionado bien. No está tan desarrollado como me gusta, pero funciona.

He escrito mi propia utilidad que es similar a GNU Stow , ya que stow no hizo todo lo que quería. Lo llamo Stow in Home . Cuando se ejecuta, busca un directorio llamado "HOME". Luego toma todo lo que hay debajo de ese directorio y lo vincula a la ubicación correspondiente en $ HOME, creando directorios según sea necesario. También traducirá los nombres de archivo: si un archivo comienza con una '_', se reemplazará con una '.'. Hice esto porque es mejor para editar mis archivos de puntos cuando no están ocultos (verlos en las listas de directorios de forma predeterminada). Luego, los pondría en el nombre que su aplicación espera.

Entonces, tengo varios repositorios git para mi configuración. Solo pongo archivos de puntos que edito personalmente en ellos. La ventaja de esto es que puedo tener un repositorio para archivos de puntos que puedo compartir con otros (como mi configuración de Emacs) y uno para otros que son privados (por ejemplo, mi configuración ssh, con nombres de host y demás para el trabajo). El enlace simbólico con estiba en el hogar pone todo en el lugar correcto, pero el control de fuente para cada uno puede ser separado.

Me ha funcionado bien. Realmente no hay ninguna razón por la que no pueda configurar algo para hacer confirmaciones automáticamente. O mueva todos los archivos de puntos a los repositorios apropiados y aún use stow en casa. Pero así es como he hecho las cosas.

Travis B. Hartwell
fuente
0

¿No puedes agregar el dot filesal repositorio utilizado en Etckeeper?

txwikinger
fuente
1
¿Como podría hacerlo? enlace simbólico a todos en algún lugar de /etc?
andrewsomething
Bueno ... esa es una opción
txwikinger
0

Lo hice copiando todos mis archivos de puntos que me gusta mantener bajo control de origen en una carpeta llamada "archivos de puntos" en mi directorio / home /. Por supuesto, esto significa mantener duplicados y copiar de un lado a otro cuando sea necesario, pero creo que esta es la solución más fácil para mí.

Derek
fuente
1
en lugar de tener que gestionar duplicados, ¿no podría simplemente crear enlaces simbólicos a sus archivos de puntos?
Ryan
¡Creo que ciertamente puedes!
Derek