Utiliser git pour gérer les fichiers de configuration de son HOME
Posted on 2014-09-09 in Trucs et astuces
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.
Configurer mr
La configuration de mr se place dans ~/.mrconfig. Ma configuration permet de pusher mes dépôts à la fois sur mon serveur perso et sur github (pour partager). Je la présente en intégralité et je vous laisse vous en inspirer pour la vôtre.
[DEFAULT] git_gc = git gc "$@" [$HOME/.config/vcsh/repo.d/emacs.git] checkout = vcsh clone --recursive ssh://git@jujens.eu/home/git/emacs.git emacs vcsh emacs remote add github git@github.com:Jenselme/dot-files-emacs.git push = vcsh emacs push vcsh emacs push github [$HOME/.config/vcsh/repo.d/zsh.git] checkout = vcsh clone ssh://git@jujens.eu/home/git/zsh.git zsh vcsh zsh remote add github git@github.com:Jenselme/dot-files-zsh.git push = vcsh zsh push vcsh zsh push github [$HOME/.config/vcsh/repo.d/dcvs.git] checkout = vcsh clone ssh://git@jujens.eu/home/git/dcvs.git dcvs vcsh dcvs remote add github git@github.com:Jenselme/dot-files-dcvs.git push = vcsh dcvs push vcsh dcvs push github [$HOME/.config/vcsh/repo.d/shell.git] checkout = vcsh clone ssh://git@jujens.eu/home/git/shell.git shell vcsh shell remote add github git@github.com:Jenselme/dot-files-shell.git push = vcsh shell push vcsh shell push github
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.