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

30

Etckeeper est un excellent outil pour suivre les 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 voudrais également conserver mes "fichiers de points" dans mon répertoire personnel sous le contrôle de la version, de préférence bazaar. Est-ce que quelqu'un sait si un outil comme etckeeper existe à cette fin?

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

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

    
posée andrewsomething 14.10.2010 - 02:09
la source

8 réponses

7

Je ne savais pas s'il y avait quelque chose qui a fait cela alors j'ai fouetté du code pour réaliser exactement ce que vous voulez en utilisant mon dépôt ici: lien

J'ai un fichier qui indique où sont tous les fichiers et où le programme generate_links les place tous. Si vous savez ce que vous faites et pouvez compiler du code Haskell, alors c'est vraiment simple et facile. Soyez averti que cela a été fait pour mon usage personnel.

    
réponse donnée Robert Massaioli 14.10.2010 - 04:38
la source
3

Eh bien, je suis allé de l'avant et l'ai fait manuellement jusqu'à ce que je trouve une meilleure solution. 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 était bzr ignore "*" . J'ai décidé que je ne voulais pas garder le tout sous contrôle de version. Cela ne valait tout simplement pas la peine, surtout quand on considère qu'il y a des choses que vous ne devriez vraiment pas garder dans vos vcs comme vos clés. Je devais donc co% évaluer les fichiers spécifiques que je voulais. Vous pouvez également ajouter des exceptions à bzr add . Les expressions régulières Python sont également utiles. Je le garde bien mince pour le moment. Si tout se passe bien, je pourrais ajouter .bzrignore et ~/.config aussi.

J'ai également écrit un script rapide que je lance en tant que job 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 "" ]; then
         bzr ci ~ -m ""
    else
        bzr ci ~ -m "Automatic commit on $TIME"
    fi
fi

exit
    
réponse donnée andrewsomething 15.10.2010 - 21:26
la source
2

J'ai transformé mon répertoire ~ en un dépôt Bazaar. Le stockage des métadonnées ne constitue pas un problème pour les fichiers du répertoire de base: tout appartient au même compte et au même groupe et bzr stocke déjà le bit d'exécution.

J'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 Une solution simple consistant à faire bzr add && bzr ci sur les répertoires sélectionnés ou à la sortie d'une commande find fera simplement le travail.

    
réponse donnée Riccardo Murri 14.10.2010 - 09:01
la source
2

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

pour zsh, par exemple, j'ai créé ".zsh" et y ai ajouté 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

donc je fais

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 pathogène, donc 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 avez plus que quelques répertoires de points que vous voulez gérer, mais rien ne vous empêche de les placer tous dans le même répertoire, ou séparés par des activités (sur tous les éditeurs graphiques) , une pour les activités web ...) ou alors. de toute façon, c'est ce que j'ai fait, donc juste mes deux cents:).

    
réponse donnée tshirtman 28.01.2012 - 20:51
la source
1

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

J'ai écrit mon propre utilitaire similaire à GNU Stow , comme 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 sous ce répertoire et le relie à l’emplacement correspondant dans $ HOME, créant ainsi 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 qu'il est plus intéressant d'éditer mes fichiers de points lorsqu'ils ne sont pas cachés (voir par défaut dans les listes de répertoires). Ensuite, il les mettrait dans le nom attendu par leur application.

J'ai donc plusieurs dépôts git pour ma configuration. Je ne mets que des fichiers de points que je modifie personnellement. L'avantage 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 (par exemple, ma configuration ssh, avec des noms d'hôtes et autres pour le travail). Le symlinking met 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 mettre quelque chose en place pour effectuer automatiquement des commits. 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.

    
réponse donnée Travis B. Hartwell 18.10.2010 - 00:10
la source
0

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

    
réponse donnée txwikinger 14.10.2010 - 03:12
la source
0

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

    
réponse donnée Derek 14.10.2010 - 04:40
la source
0

Je conserve mes fichiers dans un sous-répertoire et crée des liens symboliques. J'ai un script qui automatise cela. Vous pouvez tout vérifier sur lien

    
réponse donnée Sam King 11.06.2012 - 04:34
la source

Lire d'autres questions sur les étiquettes