Comment partager une cachette git?

32

Existe-t-il un moyen de partager une cachette dans git?

Je travaille sur un certain nombre de machines et souhaite souvent pouvoir déplacer mon état de fonctionnement actuel de l'un à l'autre.

Je cherche un moyen de pousser / tirer une cachette d'un clone à un autre et de la faire apparaître soit comme la cachette de l'autre clone, soit comme une branche distante apparente. Je ne m'attends pas à ce que le premier fonctionne nécessairement si la télécommande a déjà sa propre réserve.

Étant donné que la cachette est, en fait, déjà une branche avec des validations (apparemment), je ne cherche pas de solutions du type "valider chaque cachette dans une branche et ensuite les partager" - j'en ai déjà beaucoup, de nombreuses branches. Je recherche donc la refspec ou similaire que je peux utiliser pour contrôler le push / pulling.

PeterJCLaw
la source

Réponses:

26

La cachette est juste stashou refs/stash, que vous pouvez pousser vers une branche distante:

git push origin stash@{2}:refs/heads/otherstash

refs/stashCependant, Git refusera de pousser directement . En outre, il ne semble pas y avoir de moyen de pousser des reflogs entiers , où les stashes précédents sont stockés.

grawity
la source
6
git push origin $(for sha in $(git rev-list -g stash); do echo $sha:refs/heads/stash_$sha; done)devrait bien faire pour toutes les cachettes; Voir aussi stackoverflow.com/a/5248758/85371
sehe
11

Ce n'est pas aussi bien intégré qu'un git pushmais pour éviter de créer des branches, j'utilise git stash show -p > change.patch(après avoir caché les modifications) ou même git diff --cached > change.patchpour créer un patch que je git apply change.patchsur la prochaine machine sur laquelle je travaille.

Avec cette solution au moins, si de nombreux fichiers sont modifiés dans votre état de fonctionnement actuel, tout est contenu dans une seule unité de données.

Néo
la source
Oui mais comment ? git stash -p ne me demande que de manière interactive chaque morceau - puis crache une longue ligne que je ne comprends pas. Où est ce "patch" que je peux emporter avec moi sur une autre machine? et quel est le git diff - mis en cache? et comment utilisez-vous git apply? Pouvez-vous élaborer un peu plus s'il vous plaît?
Motti Shneor
J'ai détaillé et corrigé ma réponse
Neo
4

Vous pouvez créer un patch et l'envoyer à quelqu'un. la chose que vous avez à faire est de l'appliquer.

git diff >> file.diff

la source
3
Notez que cela ne fonctionnera que pour les objets qui génèrent un diff; méfiez-vous des «fichiers binaires diffèrent» dans la sortie.
Liam