2013-07-23 15 views
5

è successo più di una volta a lasciare l'ufficio avendo salvato solo una scorta di codice non vincolato.Qual è il modo più pratico per continuare a lavorare su un git stash su un altro computer?

Quindi, se volevo continuare a lavorare sulla stessa funzionalità, ho dovuto eseguire SSH sul mio host, creare un ramo monouso, eseguire il commit dello stash e inserire il nuovo ramo nel repository di sviluppo.

Ora mi chiedo se esiste una soluzione più pulita e più pratica per "copiare/esportare" un git stash in un altro repository locale. Ho già escluso SCP'ing il repository locale sulla mia macchina da ufficio, perché potrei avere qualche lavoro in corso anche sul mio portatile.

P.S .: mia domanda si presenta come la continuazione di questo one

risposta

2

È possibile utilizzare git stash show per fare una patch e poi git apply sul vostro computer di casa.

+0

+1 per semplicità – ziu

1

È possibile salvare una patch e inviarla a se stessi.

git diff > patchfile 

allora si può applicare con ...

git apply --stat patchfile 
+2

Se capisco 'format-patch' correttamente, presuppone che le modifiche siano già state eseguite. La domanda non riguarda invece le modifiche senza commit? – AlexE

+1

È anche la mia comprensione. Confermo che sto parlando solo di modifiche non memorizzate e nascoste. – ziu

+0

Lo aggiusterò. Grazie. – alex

0

Come sottolineato da Carl Norum, git può essere utilizzato per creare una patch. Tuttavia, il comando è un po 'complicato. Avrete bisogno di chiamare

git diff [email protected]{0}^ [email protected]{0} > patch

per creare una patch (si noti che la shell può avere bisogno di avvolgere il nome della scorta tra virgolette). Questo crea una patch per tutte le differenze tra il genitore della tua scorta e la tua scorta.

Poi, sulla vostra altra macchina, è possibile applicare la patch con

git apply patch

+0

Non è lo stesso di usare 'git stash show -u'? – ziu

+0

In una discussione che non ho potuto seguire, mi è stato detto che è diverso. Essenzialmente, poiché 'git stash show' considera commit come le unioni che sono in realtà. La soluzione proposta apparentemente fa cose più adatte. Sfortunatamente, non ho molta familiarità con quelle differenze piuttosto tecniche. Immagino che per i tuoi scopi (in ufficio: stash, creare patch da stash, a casa: patch e continuare a lavorare), la soluzione dovrebbe essere identica. Non sono sicuro però. – AlexE

+0

Sembra che potresti scrivere una domanda a riguardo :) – ziu

1

La scorta viene salvata come un particolare tipo di impegnarsi, e quindi è disponibili nel database degli oggetti git. Ma il riferimento a quel commit è al di fuori dello spazio dei nomi che è tipicamente reso disponibile per il recupero.

Si potrebbe fare il più recente scorta a disposizione per il recupero eseguendo il seguente sul repository di origine:

git symbolic-ref refs/heads/exported-stash refs/stash 

Questo creerà un ramo chiamato exported-stash che possono essere recuperati come qualsiasi altro ramo. È possibile utilizzare un nome diverso se lo si desidera, ma evitare l'uso di stash poiché ciò comporterà alcuni fastidiosi avvertimenti sul nome ambiguo con lo stash effettivo. Dopo il recupero dal telecomando può essere applicato su un altro repository con:

git stash apply origin/exported-stash 

(supponendo che è stata recuperata dal telecomando origin).

Dopo aver apportato le modifiche si potrebbe anche mettere da quelli a livello locale e spingere la scorta aggiornato torna alle origini con:

git push origin +stash:exported-stash 

Il + trasforma questo in una spinta forzata, ma in questo caso che in realtà è al sicuro. La vecchia versione dello stash sull'origine verrà spostata su [email protected]{1} poiché l'elenco di stash viene salvato come un registro di riferimenti.

+0

+1 per abilità git-fu – ziu