automatiquement stashing

voix
9

La section Liens Derniers dans la chaîne: Stashing et la reflog dans http://ftp.newartisans.com/pub/git.from.bottom.up.pdf recommande stashing souvent de prendre des instantanés de votre travail en cours. L'auteur va jusqu'à recommander que vous pouvez utiliser une tâche cron pour planquer votre travail régulièrement, sans avoir à faire une planque manuellement.

La beauté de la planque est qu'il vous permet d'appliquer le contrôle de version discrète à votre processus de travail lui-même: à savoir, les différentes étapes de votre arbre de travail de jour en jour. Vous pouvez même utiliser Stash sur une base régulière si vous voulez, avec quelque chose comme le script de cliché suivant:

$ cat <<EOF > /usr/local/bin/git-snapshot
#!/bin/sh
git stash && git stash apply
EOF
$ chmod +x $_
$ git snapshot

Il n'y a aucune raison que vous ne pouviez pas faire exécuter par une tâche cron toutes les heures, ainsi que d'exécuter la commande reflog expire chaque semaine ou mois.

Le problème avec cette approche est:

  1. S'il n'y a pas de modifications apportées à votre copie de travail, le « appliquer git stash » entraînera votre dernière planque à appliquer sur votre copie de travail.
  2. Il pourrait y avoir des conditions de course entre le moment où la tâche cron exécute et l'utilisateur travaillant sur la copie de travail. Par exemple, « git stash » fonctionne, l'utilisateur ouvre le fichier, puis du script « de git stash appliquer » est exécutée.

Quelqu'un at-il des suggestions pour faire ce travail automatique Stashing plus fiable?

Créé 17/11/2008 à 22:18
source utilisateur
Dans d'autres langues...                            


5 réponses

voix
13

Je certainement pas mis en place Stashing automatique comme décrit en ce que (par ailleurs excellent) article, exactement pour les raisons que vous citez.

Je préfère utiliser la planque car il est destiné à être utilisé, où je planque délibérément et appliquer les modifications que je travaille. Pour les sauvegardes périodiques, j'utilise une solution de sauvegarde appropriée. À mon avis, Git ne remplace pas une solution de sauvegarde.

Créé 17/11/2008 à 22:38
source utilisateur

voix
8

Stash git est en fait juste un petit script shell qui crée un commit qui est non référencé dans une branche. Vous pouvez imiter ce comportement sans conditions de course:

#!/bin/sh
GIT_DIR=$(git rev-parse --git-dir) || exit
ref_stash=refs/stash

w_commit=$(git stash create) # creates a commit for the wip

# gather some info
head=$(git log --no-color --abbrev-commit --pretty=oneline -n 1 HEAD --)
branch=$(git symbolic-ref -q HEAD)
branch=${branch#refs/heads/}
msg=$(printf 'WIP on %s: %s' "$branch" "$head")

# Make sure the reflog for stash is kept.
: >>"$GIT_DIR/logs/$ref_stash"

git update-ref -m "$msg" $ref_stash $w_commit

Le script peut avoir besoin d'être peaufinée, mais j'espère que vous avez l'idée :)

Créé 06/01/2009 à 19:01
source utilisateur

voix
3

Pour mon usage personnel (en collaboration avec que pendant 3 ans), j'ai ajouté cette ligne dans la section de configuration alias:

s = !sh -c \"git stash save | grep 'No local changes to save' && git $* || (git $* && git stash pop) \"

, Je peux alors exécuter toutes les commandes git avec Stashing automatique juste en ajoutant un « l » avant. Comme ça dans votre cas: la snaspshot de git

Peut-être trop tard, mais espère que cela aidera quelqu'un, un jour ...

Créé 12/03/2013 à 17:46
source utilisateur

voix
2

Je préfère la gestion de la branche avant la gestion de la planque: jeter un oeil ici

Créé 11/05/2009 à 11:46
source utilisateur

voix
1

Pour les choses Sauvegarde je vous recommande le service de sauvegarde en ligne, similaire à dropbox.com Vous ne littéralement pas besoin de quoi que ce soit, il suit simplement toutes les modifications apportées au cours de la journée pour vous.

Je l'ai activé pour tous mes dépôts git qui me permet de me concentrer sur la tâche réelle à portée de main.

Créé 13/03/2010 à 02:25
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more