web-dev-qa-db-fra.com

Comment garder les "fichiers de points" sous contrôle de version?

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 se démarquent vraiment. Il peut être utilisé avec une grande variété de VCS: git, Mercurial, darcs ou bzr. Il effectue également des validations automatiques quotidiennes 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 souhaite également conserver mes "fichiers de points" dans mon répertoire personnel sous contrôle de version, de préférence Bazaar. Est-ce que quelqu'un sait s'il existe un outil comme etckeeper à cette fin?

Dans le pire des cas, j’imagine qu’un simple travail cron exécutant bzr add && bzr ci une ou deux fois par jour avec l’ajout de ~/Documents, ~/Music, etc. au .bzrignore quiconque fait déjà quelque chose de similaire avec un script?

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

30
andrewsomething

Je ne savais pas s'il y avait quoi que ce soit qui a fait cela, alors j'ai préparé 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 dit où tous les fichiers appartiennent et le programme generate_links les met simplement tous là. Si vous savez ce que vous faites et pouvez compiler du code Haskell, alors c'est très simple et facile. Soyez averti que cela a été fait pour mon usage personnel.

7
Robert Massaioli

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

J'ai d'abord fait un bzr init ~, mais la prochaine chose que j'ai faite a été bzr ignore "*". J'ai décidé que je ne voulais pas garder le tout sous contrôle de version. Cela n'en valait simplement pas la peine, surtout si vous considérez qu'il y a certaines choses que vous ne devriez vraiment pas garder dans des vcs comme vos clés. Donc, je devais alors bzr add les fichiers spécifiques que je voulais. Vous pouvez également ajouter des exceptions à .bzrignore. Python _ les expressions régulières sont également utiles. Je le garde assez mince pour l'instant. Si tout se passe bien, je pourrais aussi ajouter tous les ~/.config et ~/.gconf.

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, le cas échéant, une validation 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
3
andrewsomething

Je conserve mes fichiers zsh et vim dans git, sur github, dans différents référentiels:

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 ceci.

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://[email protected]:tshirtman/.zsh
cd .zsh
./init.sh

pour .vim, c'est presque pareil, sauf que j'utilise des sous-modules pour les plugins, avec pathogen, alors j'ai ajouté ça dans l'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 voulez gérer plusieurs répertoires de points, mais rien ne vous empêche de les mettre tous dans le même répertoire ou séparés par des activités (pour tous les éditeurs graphiques, un pour activités Web…) ou à peu près. En tout cas, c'est ce que j'ai fait, donc juste mes deux sous :).

2
tshirtman

J'ai transformé tout mon répertoire ~ dans un référentiel Bazaar. Stocker les métadonnées n’est pas un problème pour les fichiers du répertoire de départ: tout appartient au même compte et au même groupe, et bzr enregistre déjà le bit d’exécution.

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

2
Riccardo Murri

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 je l'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 . Lorsqu'il est exécuté, il recherche un répertoire nommé "HOME". Il prend ensuite tout ce qui se trouve sous ce répertoire et le lie symboliquement à l'emplacement correspondant dans $ HOME, en 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 ".". Je l’ai fait parce que c’est plus pratique pour éditer mes fichiers de points quand ils ne sont pas cachés (les voir dans les listes de répertoires par défaut). Ensuite, cela les mettrait au nom prévu par leur application.

Donc, j'ai plusieurs dépôts git pour ma configuration. Je ne mets que des fichiers de points que j'ai personnellement édités. L'avantage de cela est que je peux avoir un référentiel pour les fichiers de points que je peux partager avec d'autres (comme ma configuration Emacs) et un pour les autres qui sont privés (par exemple, ma configuration ssh, avec les noms d'hôte et autres pour le travail). Le symlinking put avec stow-in-home met tout au bon endroit, mais le contrôle de source pour chacun peut être séparé.

Cela a bien fonctionné pour moi. Il n'y a vraiment aucune raison pour que je ne puisse pas configurer quelque chose pour faire automatiquement des commits. Ou déplacez tous les fichiers de points dans les référentiels appropriés et utilisez toujours stow à la maison. Mais c'est comme ça que j'ai fait les choses.

1
Travis B. Hartwell

Ne pouvez-vous pas ajouter le dot files au référentiel utilisé dans Etckeeper?

0
txwikinger

Je l'ai fait en copiant tous mes fichiers points que j'aime garder sous contrôle de source dans un dossier appelé "fichiers points" dans mon répertoire/home /. Bien sûr, cela signifie garder des doublons et faire des copies lorsque cela est nécessaire, mais je trouve que c'est la solution la plus simple pour moi.

0
Derek

Je garde mes fichiers dans un sous-répertoire et crée des liens symboliques. J'ai un script qui automatise cela. Vous pouvez vérifier le tout à partir de http://code.google.com/p/samking-config-files/source/browse/

0
Sam King