2010-10-19 12 views
203

Ho bisogno di un modo per esportare una modifica nascosta su un altro computer.Esportare una scorta su un altro computer

Su Computer1 ho fatto

$ git stash save feature 

Sto cercando di ottenere la patch scorta in un file e quindi importarlo in un altro computer

$ git stash show -p > patch 

Questo comando mi dà un file che posso passare a un altro computer in cui questo repository è clonato, ma la domanda è come importarlo di nuovo.

Grazie

risposta

206

È possibile applicare un file di patch (senza commettere ancora le modifiche), semplicemente eseguendo

git apply patchfile 

Poi si può semplicemente creare una nuova scorta dalla directory di lavoro corrente:

git stash 
+1

@Marcelo A: Buono a sapersi, ma contrassegnare le risposte accettate come tali facendo clic sul segno di spunta sotto il numero di votazione della risposta. In questo modo la tua domanda sarà contrassegnata come risolta. – poke

+2

Si noti che il sistema non permetterà all'OP di contrassegnare una risposta come "accettata" fino a qualche tempo (15 minuti, penso) sia trascorso dal momento in cui è stata fatta la domanda. –

+10

Dopo aver letto questa risposta, una cosa che mi chiedevo era come selezionare una particolare scorta da tutte le mie fasce. La risposta è qui: http://stackoverflow.com/a/1910142/1148702. In questo caso ho finito per fare: 'git stash show" stash @ {0} "-p> patch' invece del secondo comando della shell dell'OP. –

10

in alternativa è possibile creare un ramo dal proprio archivio (sul computer 1), utilizzando

git stash branch stashed_changes_branch 

confermare le modifiche:

git commit -a 

poi aggiungerlo come un telecomando sul computer 2:

git remote add pc1 [email protected]:/path/to/repo 

ora è possibile recuperare le informazioni a distanza utilizzando

git fetch pc1 

ora puoi importare il commit nel modo desiderato; utilizzando git cherry-pick, git rebase o quello che vuoi ... Se si desidera guardare come hai appena fatto applicare git scorta; puoi usare git cherry-pick --no-commit.


Se si dispone di alcun collegamento diretto tra COMPUTER1 e computer2; è possibile utilizzare un telecomando (come GitHub o qualcosa di simile):

git push origin stashed_changes_branch 

e computer2:

git fetch 
+1

Questo presuppone che il sistema di origine (computer1) sia aperto per ricevere connessioni esterne che per la maggior parte delle persone atterrano qui non è probabile che sia vero. Se vuoi seguire la diramazione perché non spingere semplicemente un ramo temporaneo su un'origine remota e prelevarlo da computer2? Puoi eliminare il ramo remoto non appena hai tirato se non vuoi tenerlo in giro. I rami in git sono così economici che di solito ci sono pochi motivi per non usarli. – indivisible

+0

@indivisible Non sono d'accordo, ci sono molte opportunità per connettere due computer su internet oggi. La tecnica descritta nella risposta potrebbe essere utile per trasferire un lavoro in corso da un laptop a un desktop su una LAN. Anche un servizio VPN virtuale come Hamachi potrebbe essere usato per trasferire file su Internet ovunque direttamente tra i computer che eseguono git. – steampowered

+1

@steampowered, sicuro che _may_ sia vero per alcune persone/situazioni ma ho pensato che fosse un punto degno di nota per i futuri lettori in quanto è un requisito irrinunciabile per questa soluzione funzionare e modificare il tuo env/sistema locale per accettare il traffico in entrata non banale configurazione che, a mio parere, è "overkill" per un compito come questo. Se il/i tuo/i sistema/i è/sono già aperto allora usa sempre questa risposta - non è corretto.Sento che la maggior parte degli utenti che atterrano qui non si troveranno in una situazione del genere. – indivisible

6

In alternativa, è possibile esportare l'intero stashes locali ad un altro compter come segue

  • git pull sia nella directory vecchia sia nella nuova directory git per garantire che entrambe abbiano le ultime modifiche.
  • copia il.cartella git dalla vecchia directory git al nuovo repository
2

Un'altra opzione è quella di rsync il .git cartella da un computer a un altro computer. rsync elabora solo le modifiche ai file (più veloci di una copia).

Uno svantaggio di questo approccio è che le configurazioni verranno sovrascritte, cosa che potrebbe non essere desiderata se si eseguono diverse configurazioni .git tra le due macchine. Ma potresti superare questo problema escludendo i file con l'opzione --exclude in rsync.

Nel complesso, penso che una soluzione Git nativa sia più pulita, ma questo hack rsync potrebbe essere bello per qualcuno di fretta che potrebbe avere maggiore familiarità con rsync di git.

0

Il comando di avvio dal post originale:

git stash show -p [email protected]{x} > patch_file 

non ha funzionato per me (per qualche motivo ha creato file di patch non utilizzabili). Invece ho dovuto:

git stash apply [email protected]{x} 
git commit 

per ogni scorta ho voluto trasferire. Poi, ho messo il repo 'genitore' all'interno di file: /// portata dei pronti contro termine 'bambino', e ha fatto seguito, per ogni scorta impegno:

git fetch file:///path_to_parent_git && git cherry-pick commit_sha 
git reset --soft HEAD^ 
git stash save my_new_stash_on_child 

Questo è più complessa, ma ha fatto il trucco per me .

Problemi correlati