Cet article fait partie d’une longue série en cours d’écriture consacrée à git.
Je suis en train de revoir toutes mes configurations et de les versionner alors je partage la méthode qui est relativement simple mais moyennement connue. Elle ne nécessite pas d’outils particuliers (le seul prérequis étant git) et pas de liens symboliques. Les fichiers sont versionnés, utilisables sur différentes machines. Il est possible d’avoir différentes configurations, il suffit pour cela de travailler sur différentes branches.
Créer son dépôt
On crée notre dépôt vide dans $HOME/.mydotfiles
avec l’option --bare
car nous n’aurons pas besoin de la copie de travail. On le préfixe d’un point
afin qu’il soit caché.
git init --bare $HOME/.mydotfiles.git
Créer un alias de commodité
Ensuite, on ajoute un alias à son ~/.bashrc
, son ~/.zshrc
, etc. Cet
alias va permettre d’agir plus simplement sur le dépôt, quel que soit l’endroit
où l’on se trouve. L’alias définit également un work-tree qui
pointe sur le dossier $HOME
. C’est ce work-tree qui permet de s’affranchir
de tous les liens symboliques.
# définition de l'alias dans la session courante
alias dot='git --git-dir=$HOME/.mydotfiles.git/ --work-tree=$HOME'
# enregistrement de l'alias dans le fichier de configuration du shell afin de pouvoir l'utiliser plus tard
# zshrc
printf "\nalias dot='git --git-dir=%s/.mydotfiles.git/ --work-tree=%s'\n" "\$HOME" "\$HOME" >> $HOME/.zshrc
# bashrc et bash_profile
printf "\nalias dot='git --git-dir=%s/.mydotfiles.git/ --work-tree=%s'\n" "\$HOME" "\$HOME" >> $HOME/.bashrc
printf "\nif [ -f ~/.bashrc ]; then\n" >> $HOME/.bash_profile
printf " source ~/.bashrc\n" >> $HOME/.bash_profile
printf "fi\n" >> $HOME/.bash_profile
Configurer git status pour ne pas afficher les fichiers non suivis
On définit la propriété status.showUntrackedFiles
à no
. De cette façon, dans le work-tree, on ne verra pas les fichiers qui
ne sont pas suivis dans notre dépôt. Le nombre de fichiers peut être très élevé
si l’utilisateur en possède beaucoup, notamment sous macOS, où le dossier
~/Library
est énorme.
dot config --local status.showUntrackedFiles no
Notez qu’il est tout de même possible de lister les fichiers non suivis en utilisant la commande suivante :
dot status -u
Ajouter des fichiers au dépôt
Depuis le répertoire $HOME
, on peut ajouter directement des fichiers en
utilisant l’alias défini précédemment. Il est important que bashrc et / ou
zshrc contiennent l’alias défini plus haut.
dot add .vimrc
dot commit -m "Add vimrc"
dot add .bashrc .bash_profile
dot commit -m "Add bashrc and sourcing from bash_profile"
dot add .zshrc
dot commit -m "Add zshrc"
# ajout du remote pour indiquer où on pousse les commits, mon dépôt github, dans mon cas
dot remote add origin [email protected]:qanuq/mydotfiles.git
# on pousse vers le dépôt dans main
dot push --set-upstream origin main
On pourra utiliser les commandes classiques de git, mais il faudra le faire au
moyen de l’alias dot
. Ainsi, on pourra créer des branches, pour des
machines différentes, par exemple, utiliser la branche develop pour les phases
de test, etc. À vous de décider en fonction de vos besoins.
Déployer la configuration sur une nouvelle machine
Il faut bien sûr disposer de git sur la machine sur laquelle on veut déployer la configuration et le dépôt central devra être joignable depuis la machine en question.
Ensuite, on redéfinit l’alias pour la session courante. Il est inutile de le redéfinir dans bashrc ou zshrc puisqu’il a déjà été commité dans notre dépôt.
# définition de l'alias dans la session courante
alias dot='git --git-dir=$HOME/.mydotfiles.git/ --work-tree=$HOME'
On clone le dépôt en mode --bare
depuis github et on le stocke dans
$HOME/.mydotfiles
.
git clone --bare [email protected]:qanuq/mydotfiles.git $HOME/.mydotfiles.git
On désactive l’affichage des fichiers non suivis.
dot config --local status.showUntrackedFiles no
On fait un checkout de la configuration dans $HOME
. On peut le faire depuis
n’importe quel répertoire étant donné que l’alias précise que le work-tree se
trouve dans $HOME
.
dot checkout main
Si un des fichiers commités est déjà présent dans $HOME
, vous verrez
apparaitre ce message d’erreur.
dot checkout main
error: The following untracked working tree files would be overwritten by checkout:
.bashrc
.vimrc
.zshrc
Please move or remove them before you switch branches.
Aborting
Par sécurité, git n’écrasera pas vos fichiers et vous avertira. Vous devrez supprimer ces fichiers après les avoir au préalable sauvegardés avant de relancer le checkout.
dot checkout main
Si vous voulez tout écraser, vous pouvez ajouter l’option --force
.
Voilà, vous connaissez la méthode. Plus qu’à ajouter vos fichiers de configuration dedans et de déployer vos configurations un peu partout…