Depuis pas mal de temps, je gère les fichiers de conf de mon home avec git,
notamment ma conf emacs et mon dossier bin. L'intérêt étant à la fois de pouvoir
partager les configurations entre plusieurs ordinateurs, de pouvoir revenir en
arrière en cas de besoin et de voir l'historique (surtout pour emacs).
Je faisais ça à la main, avec un dépôt git tout simple. Puis, suite à lecture de
cet article, j'ai décidé de passer à
vcsh et mr.
VCSH – Version Control System for $HOME
L'intérêt de ce logiciel est qu'il vous permet de faire cohabiter plusieurs
dépôts git dans un même dossier. Ainsi vous pouvez facilement avoir un dépôt git
par catégorie de logiciel : un pour emacs, un pour votre bin, un autre pour zsh, …
Par défaut, tous les dépôts sont dans ~/.config/vcsh/repos.d. Évidemment ça
se paramètre, voir la page du projet sur github.
Normalement, vous pouvez installer vcsh depuis les dépôts de votre
distribution.
mr — myrepo
mr est le compagnon de vcsh puisqu'il vous permet en une seule commande d'agir
sur plusieurs dépôts. Ainsi, pour pusher ou puller les modifications de tous les
dépôts sur un serveur il suffit de faire mr push ou mr checkout. Il
permet aussi de gérer la configuration des dépôts (sur quels url pusher
les modifications, sur votre serveur perso et sur github par exemple).
Une fois de plus, le logiciel devrait être dans les dépôts de votre
distribution. Plus d'infos ici.
Mettre en place vcsh
Vous devez tout d'abord identifier comment vous désirez organiser vos
dépôts. Personnellement, je me suis organisé comme suis (les liens pointent sur
github) :
- dvcs pour les configurations
de git, mercurial et mr
- emacs pour la configuration d'Emacs
- shell pour mon bin/ et les aliases + fonction
- zsh pour la configuration de
zsh
Pour initialiser un nouveau dépôt, rien de très compliqué :
# Initialisation du dépôt
vcsh init emacs
# Création du gitignore pour éviter d'avoir des erreures sur les dossiers non #suivi.
# Met simplement * dans le fichier.
vcsh write-gitignore emacs
# Ajout des fichiers
vcsh emacs add -f ~/.emacs ~/.emacs.d ~/.gitignore.d/emacs
vcsh emacs commit -am 'intial commit'
vcsh emacs remote set-url --add origin git@github.com:Jenselme/dot-files-emacs.git
Il peut être intéressant de personnaliser son .gitignore (qui de base est un peu
violent), surtout pour des configurations auxquelles on ajoute des fichiers
(comme celle d'emacs). Pour cela, il faut utiliser le ! pour inclure un sous
chemin exclu. Par exemple avec mon ~/.gitignore.d/emacs (le / représente la
racine du dépôt) :
/*
!/.emacs
!/.emacs.d
*.elc
*~
/.emacs.d/session*
/.emacs.d/tramp
.emacs.d/url
.emacs.d/semanticdb/*
\#*
.emacs.d/*.dat
.emacs.d/*.lst
Je signale que si vous omettez le nom du dépôt pour une commande vcsh, alors
elle s'appliquera à tous. Particulièrement utile si vous voulez connaître le
statut de tous vos dépôts.
Récupérer la configuration
Si vous arrivez sur une nouvelle machine, vous n'avez plus qu'à installer mr et
vcsh et cloner le dépôt contenant la configuration de mr.
vcsh clone ssh://git@jujens.eu/home/git/dcvs.git dcvs
mr checkout
Pour mettre à jour tous ces dépôts, un petit mr update suffit.
Conclusion
Le duo vcsh + mr est simple et efficace pour partager ses configurations entre
plusieurs ordinateurs.