Une stash est une validation de fusion spéciale de l'arborescence de travail entre la validation de base et l'index. Une façon pourrait être de les enregistrer chacun sous forme de correctifs séparés, de retirer le premier parent de la cachette, de restaurer l'index et l'arborescence de travail des deux correctifs et enfin de restaurer la cachette (il semble qu'une réponse va dans ce sens).
Cela est nécessaire pour recréer entièrement toutes les informations de la cachette, et si vous ne vous souciez pas de cela, vous devez au moins extraire le premier parent de la cachette avant de restaurer pour éviter les conflits et garder une trace de l'endroit où la cachette a été créée.
C'est ce que j'ai fait pour restaurer complètement toutes les cachettes d'un dépôt à un autre. Si vous ne pouvez pas les avoir sur le même ordinateur, vous pouvez enregistrer les balises de dissimulation dans un ensemble après les avoir créées et copier la liste des références et l'ensemble sur l'ordinateur cible.
De la racine du dépôt d'origine:
- Obtenez la liste des références cachées
- Balisez vos références de sauvegarde afin que vous puissiez les récupérer avec git fetch (les noms de balises ne correspondent pas, modifiez-les en cas de conflit. J'ai utilisé
stash_
+ le (s) nombre (s) dans la référence de sauvegarde logique)
- Convertissez les références logiques en hachages sha1 dans l'ordre inverse - nous les utiliserons plus tard
- Enregistrez ce chemin de dépôt - également pour plus tard
refs=$(git stash list|cut -d: -f1)
for ref in $refs; do tag stash_${ref//[^0-9]} $ref; done
refs=$(git rev-parse $refs|tac)
oldpath=$PWD
NB: Cela nécessite bash ou un shell compatible (ksh, zsh devrait faire ...) Vous pouvez également incrémenter une variable, ex stash_$((i++))
si votre shell ne supporte pas${param//pattern}
Maintenant dans le nouveau repo, pour chaque ref:
- Récupérer la référence de l'ancien dépôt (nous n'avons même pas besoin d'utiliser les noms des balises, car nous les avons marqués, nous pouvons les récupérer avec git fetch)
- Réimportez la cachette de la référence, en utilisant le sujet de cette référence comme message de cachette.
for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done
git stash save
est désormais déconseillé au profit degit stash push