Comment garder les «fichiers dot» sous contrôle de version?

30

Etckeeper est un excellent outil pour garder une trace des modifications apportées à vos fichiers de configuration dans /etc. Quelques éléments clés à ce sujet ressortent vraiment. Il peut être utilisé avec une grande variété de VCS: git, mercurial, darcs ou bzr. Il effectue également des validations automatiques quotidiennement et chaque fois que vous installez, supprimez ou mettez à niveau un package. Il assure également le suivi des autorisations de fichiers et des métadonnées de propriété des utilisateurs / groupes.

Je voudrais également garder mes "fichiers dot" dans mon répertoire personnel sous contrôle de version également, de préférence bazar. Est-ce que quelqu'un sait si un outil comme etckeeper existe à cet effet?

Le pire des cas, j'imagine qu'un simple travail de cron courir bzr add && bzr ciune ou deux fois par jour avec l' ajout ~/Documents, ~/Musicetc à la .bzrignore Toute personne faisant déjà quelque chose de similaire avec un script?

Bien que je préfère le bazar, d'autres options pourraient être intéressantes.

andrewsomething
la source
4
Discussion connexe sur Unix Stack Exchange: Conseils pour mettre ~ sous contrôle de code source . Il ne répond pas à votre question, mais peut néanmoins fournir des informations utiles.
Gilles 'SO- arrête d'être méchant'
1
Il existe de nombreux outils pour cela maintenant. Voir dotfiles.github.io dans la section "Utilitaires dotfile à usage général".
Robin Green
@RobinGreen Si vous avez travaillé cela dans une bonne réponse, je pourrais l'accepter. bzrn'est certainement pas la voie à suivre en 2015.
andrewsomething

Réponses:

7

Je ne savais pas s'il y avait quelque chose qui a fait cela, j'ai donc fouetté du code pour obtenir exactement ce que vous voulez en utilisant mon référentiel ici: http://github.com/robertmassaioli/config-files

J'ai un fichier qui indique où tous les fichiers appartiennent et le programme generate_links les met tous là. Si vous savez ce que vous faites et que vous pouvez compiler du code Haskell, c'est vraiment simple et facile. Mais sachez qu'il a vraiment été fait pour mon usage personnel.

Robert Massaioli
la source
3
+1 pour haskell! -1 pour haskel! lol. non mais vraiment.
Derek
Je t'entends. J'ai choisi Haskell parce que je l'apprends, c'est peut-être la langue qui convient le mieux à l'emploi. :)
Robert Massaioli
3

Eh bien, je suis allé de l'avant et je l'ai fait manuellement jusqu'à ce que je trouve une meilleure solution. Je pourrais donc tout aussi bien expliquer ce que j'ai fait.

J'ai d'abord fait un bzr init ~, mais la prochaine chose que j'ai fait était bzr ignore "*". J'ai décidé que je ne voulais pas garder le tout sous contrôle de version. Cela n'en valait tout simplement pas la peine, surtout lorsque vous considérez qu'il y a des choses que vous ne devriez vraiment pas garder en vcs comme vos clés. Je devais donc bzr addles fichiers spécifiques que je voulais. Vous pouvez également ajouter des exceptions à .bzrignore. Les expressions régulières Python y sont également utiles. Je le garde assez mince pour l'instant. Si tout va bien, je pourrais ajouter tous ~/.configet ~/.gconfaussi.

J'ai également écrit un script rapide que je lance en tant que tâche cron. Il vérifie si les fichiers ont changé, et si c'est le cas, un commit automatique:

#! /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
la source
J'avais sélectionné ma propre réponse lorsque j'ai publié ceci pour la première fois, mais j'ai décidé de l'annuler. Ce n'est certainement pas la meilleure réponse à cette question en 2015.
andrewsomething
2

J'ai transformé tout mon ~répertoire en un référentiel Bazaar. Le stockage des métadonnées n'est pas un problème pour les fichiers dans le répertoire personnel: tout appartient au même compte et groupe, et bzrstocke déjà le bit d'exécution.

J'y ajoute manuellement les fichiers "intéressants" (je ne veux pas, par exemple, ma collection de musique ou le cache firefox être sous contrôle de version), mais si vous voulez automatiser cela avec un script, je pense que c'est la solution simple de faire bzr add && bzr cisur des répertoires sélectionnés ou sur la sortie d'une findcommande fera juste le travail.

Riccardo Murri
la source
2

Je garde mes fichiers zsh et vim dans git, mis sur github, dans différents dépôts:

pour zsh, par exemple, j'ai créé ".zsh" et y ai mis zshrc et zshenv, plus un script pour lier zshrc à ~ / .zshrc et zshenv à ~ / .zshenv, quelque chose comme ça.

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

moi aussi

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

pour .vim, c'est presque la même chose, sauf que j'utilise des sous-modules pour les plugins, avec pathogène, j'ai donc ajouté cela dans init.sh

git submodule init
git submodule update

et quand je veux ajouter un plugin vim, je le fais

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

par exemple.

ok, cela demanderait un peu trop de travail si vous avez plus de quelques répertoires de points que vous voulez gérer, mais rien ne vous empêche de les mettre tous dans le même répertoire, ou séparés par des activités (activé pour tous les éditeurs graphiques, un pour activités web…) ou plus. de toute façon, c'est ce que j'ai fait, donc juste mes deux cents :).

tshirtman
la source
1

J'utilise une solution qui n'est pas automatique comme etckeeper (je dois valider manuellement), mais cela a bien fonctionné pour moi. Ce n'est pas aussi développé que j'aime, mais ça marche.

J'ai écrit mon propre utilitaire similaire à GNU Stow , car stow n'a pas fait tout ce que je voulais. Je l'appelle Stow in Home . Lors de son exécution, il recherche un répertoire nommé "HOME". Il prend ensuite tout sous ce répertoire et le relie à l'emplacement correspondant dans $ HOME, créant des répertoires si nécessaire. Il traduira également les noms de fichiers - si un fichier commence par un '_', il sera remplacé par un '.'. J'ai fait cela parce que c'est plus agréable pour éditer mes fichiers dot lorsqu'ils ne sont pas cachés (les voir dans les listes de répertoires par défaut). Ensuite, cela leur donnerait le nom que leur application attend.

J'ai donc plusieurs dépôts git pour ma configuration. Je ne mets que des fichiers dot que je modifie personnellement. L'avantage de cela est que je peux avoir un référentiel pour les fichiers dot que je peux partager avec d'autres (comme ma configuration Emacs) et un pour d'autres qui sont privés (par exemple, ma configuration ssh, avec des noms d'hôtes et autres pour le travail). Le lien symbolique avec le rangement à la maison met tout au bon endroit, mais le contrôle de la source pour chacun peut être séparé.

Cela a bien fonctionné pour moi. Il n'y a vraiment aucune raison pour laquelle je n'ai pas pu configurer quelque chose pour effectuer automatiquement des validations. Ou déplacez tous les fichiers de points dans les référentiels appropriés et utilisez toujours stow in home. Mais c'est comme ça que j'ai fait les choses.

Travis B. Hartwell
la source
0

Vous ne pouvez pas ajouter le dot filesau référentiel utilisé dans Etckeeper?

txwikinger
la source
1
Comment ferais-je ça? tous les liens symboliques vers quelque part /etc?
andrewsomething
Eh bien .. c'est une option
txwikinger
0

Je l'ai fait en copiant tous mes fichiers dot que j'aime garder sous contrôle de source dans un dossier appelé "fichiers dot" dans mon répertoire / home /. Bien sûr, cela signifie conserver les doublons et les copier d'avant en arrière si nécessaire, mais je trouve que c'est la solution la plus simple pour moi.

Derek
la source
1
au lieu d'avoir à gérer les doublons, ne pourriez-vous pas simplement créer des liens symboliques vers vos fichiers dot?
Ryan
Je pense que vous pouvez certainement!
Derek