2010-02-11 11 views
17

Un collega ha una scorta nel proprio repository a cui posso accedere (tramite il filesystem), e mi piacerebbe inserire quella stash in un ramo nel mio repository.Posso recuperare una scorta da un repository remoto in una filiale locale?

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

Ma quando provo a prendere che, git mi dice "incapace di trovare 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 

C'è un modo per prendere il nascondiglio a distanza?

risposta

8

Aggiornamento: una risposta diretta alla domanda del manifesto originale è:

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

'tempbranch' sarà al ultima scorta (scorta @ {0}) dal telecomando. Sfortunatamente non penso che il reflog venga prelevato dai rami remoti, quindi non c'è modo di raggiungere gli altri stash, a meno che tu non abbia accesso al repository di origine.

Scripting è: ho postato una soluzione più completa 'sceneggiata' sopra alla questione di cui

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

Inoltre, come ho scoperto nel frattempo, git-Send-pack può essere determinante se avete accesso al repository di origine:

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

Grazie, l'ho visto (e lo ha svalutato). Tuttavia questa domanda sta cercando di risolvere un problema diverso; Potevo vedere il repository remoto, ma il mio collega aveva messo da parte invece di impegnarsi, poi era andato a casa e mi ha parlato della scorta, quindi volevo solo prendere quella scorta. Un paio di soluzioni a più lunga durata si presentano (ad esempio, creare una patch e applicarla localmente) ma stavo cercando un modo diretto per recuperare la memoria nel mio repository. –

+0

Commento modificato con ulteriori approfondimenti – sehe

+0

Oh, GRAZIE! Grazie! –

1

Non si può ma questo fornisce un percorso alternativo. is-it-possible-to-push-a-git-stash-to-a-remote-repository

+0

Ciao naven87. Ho visto quell'altra domanda di SO, ma non mi andava bene quello di cui avevo bisogno. Grazie per la risposta, e lo accetterò dopo un po 'se nessun altro posterà una soluzione più diretta. –

+0

OK, accettato. Grazie, naven87. –

8

Sì, è possibile, parzialmente. Il stash è solo un altro ref. Puoi recuperare i ref che non sono teste (diramazioni) specificando uno refspec con il percorso ref completo.

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

È possibile configurare questo in su per andare a prendere la scorta quando si esegue un normale fetch troppo:

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

Ma questa avrà esito negativo se non v'è alcuna scorta con un "refspec non valido", come l'arbitro non esiste, quindi probabilmente stai meglio se lo fai su richiesta. È possibile impostare un alias come:

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 

L'avvertenza è che non è possibile recuperare più file. Questi sono memorizzati come voci nel reflog e non è possibile recuperare il reflog di un telecomando.

+2

Questa dovrebbe essere la risposta accettata – HerrSerker

+0

concordata. Il primo git fetch + git stash pair è magico. –

Problemi correlati