2010-02-11 13 views
17

Un collègue a une cachette dans son dépôt auquel je peux accéder (via le système de fichiers), et j'aimerais tirer cette cachette dans une branche de mon dépôt.Puis-je récupérer une mémoire d'un dépôt distant dans une succursale locale?

 
% git ls-remote ~alice/work/repo/ stash 
3ccc82fb1ee0e7bde1250c7926d333ce21c109c0  refs/stash 

Mais lorsque je tente de chercher que, git me dit « incapable de trouver 3cc82 ... »

 
% git fetch ~alice/work/repo stash:new_branch 
remote: Total 0 (delta 0), reused 0 (delta 0) 
error: unable to find 3ccc82fb1ee0e7bde1250c7926d333ce21c109c0 
fatal: object 3ccc82fb1ee0e7bde1250c7926d333ce21c109c0 not found 

Est-il possible que je peux aller chercher la cachette à distance?

Répondre

8

Mise à jour: Une réponse directe à la question de l'affiche originale est:

git send-pack ./ 3ccc82fb1ee0e7bde1250c7926d333ce21c109c0:refs/heads/tempbranch 

'tempbranch' sera au dernière Stash (Stash @ {0}) de la télécommande. Malheureusement je ne pense pas que le reflog soit récupéré à partir de branches distantes, donc il n'y a aucun moyen d'obtenir les autres cachettes, sauf si vous avez accès au repo source.

Scripting il: Je posté une plus complète solution 'scénarisé' sur la question mentionnée

Is it possible to push a git stash to a remote repository?

Aussi, comme je l'ai découvert en attendant,-envoyer-pack git peut jouer un rôle si vous avez accès au repo source:

git send-pack ../myworkingfolder/ [email protected]{0}:refs/heads/collegue_stash 
+0

Merci, j'ai vu ça (et l'a upvoted). Cependant, cette question tente de résoudre un problème différent; Je pouvais voir le repo à distance mais mon collègue avait caché au lieu de commettre, puis est rentré à la maison et m'a parlé de la cachette, alors je voulais juste attraper cette cachette. Quelques solutions plus longues se présentent (par exemple faire un patch et l'appliquer localement) mais je cherchais un moyen direct d'aller chercher le cachet dans mon repo. –

+0

Commentaires édités avec plus d'idées – sehe

+0

Oh, NICE! Merci! –

1

Vous ne pouvez pas mais cela vous fournit un autre chemin. is-it-possible-to-push-a-git-stash-to-a-remote-repository

+0

Salut naven87. J'ai vu cette autre question SO, mais cela ne correspondait pas à ce dont j'avais besoin. Merci pour votre réponse, et je vais l'accepter après un certain temps si personne d'autre ne publie une solution plus directe. –

+0

OK, accepté. Merci naven87. –

8

Oui, vous pouvez, partiellement. Le stash est juste un autre ref. Vous pouvez récupérer des refs qui ne sont pas des têtes (branches) en spécifiant un refspec avec le chemin ref complet.

git fetch some-remote +refs/stash:refs/remotes/some-remote/stash 
git stash apply some-remote/stash 

Vous pouvez configurer ce jusqu'à aller chercher la cachette lorsque vous exécutez à une récupération ordinaire aussi:

git config --add remote.some-remote.fetch +refs/stash:refs/remotes/some-remote/stash 
git fetch some-remote 
git stash apply some-remote/stash 

Mais cela échouera s'il n'y a pas planque avec un « non valide refspec » comme l'arbitre n'existe pas, donc vous feriez probablement mieux de le faire à la demande. Vous pouvez configurer un alias comme:

cat > /usr/local/bin/git-fetch-stash 
git fetch --verbose "$1" +refs/stash:refs/remotes/"$1"/stash 
^D 
chmod +x /usr/local/bin/git-fetch-stash 

git fetch-stash some-remote 

La mise en garde est que vous ne pouvez pas récupérer plusieurs cachettes. Ceux-ci sont stockés en tant qu'entrées dans le reflog, et vous ne pouvez pas récupérer le refog d'une télécommande.

+2

Ceci devrait être la réponse acceptée – HerrSerker

+0

D'accord. La première paire git fetch + git stash est magique. –