2010-10-19 7 views
203

J'ai besoin d'un moyen d'exporter une modification cachée vers un autre ordinateur.Exporter une mémoire vers un autre ordinateur

Sur Computer1 j'ai fait

$ git stash save feature 

J'essaie d'obtenir le patch de planque dans un fichier, puis l'importer sur un autre ordinateur

$ git stash show -p > patch 

Cette commande me donne un fichier que je peux passer à un autre ordinateur où ce repo est cloné, mais la question est de savoir comment l'importer à nouveau.

Merci

Répondre

206

Vous pouvez appliquer un fichier correctif (sans commettre les changements encore) en exécutant simplement

git apply patchfile 

Ensuite, vous pouvez simplement créer une nouvelle planque à partir du répertoire de travail courant:

git stash 
+1

@Marcelo A: C'est bon à entendre, mais veuillez cocher les réponses que vous avez acceptées en cliquant sur la grosse coche en dessous du numéro de vote de la réponse. De cette façon, votre question sera marquée comme résolue. – poke

+2

Notez que le système ne laissera pas l'OP marquer une réponse comme "acceptée" jusqu'à ce qu'un certain temps (15 minutes, je pense) se soit écoulé depuis le moment où la question a été posée. –

+10

Après avoir lu cette réponse une chose que je me demandais était de savoir comment sélectionner une cachette particulière de toutes mes cachettes. La réponse à cela est ici: http://stackoverflow.com/a/1910142/1148702. Dans ce cas, j'ai fini par faire: 'git stash show 'stash @ {0}" -p> patch' à la place de la deuxième commande shell de l'OP. –

10

Vous pouvez également créer une branche à partir de votre stockage (sur l'ordinateur 1), en utilisant

git stash branch stashed_changes_branch 

vos changements:

git commit -a 

puis l'ajouter comme une télécommande sur l'ordinateur 2:

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

maintenant vous pouvez récupérer les informations à distance en utilisant

git fetch pc1 

maintenant vous pouvez importer le commit de la manière que vous voulez; en utilisant git cherry-pick, git rebase ou ce que vous voulez ... Si vous voulez que cela ressemble à ce que vous venez de faire git stash s'appliquent; vous pouvez utiliser git cherry-pick --no-commit.


Si vous avez aucun lien direct entre ordinateur1 et computer2; vous pouvez utiliser une télécommande (comme github ou quelque chose de similaire):

git push origin stashed_changes_branch 

et computer2:

git fetch 
+1

Cela suppose que le système source (computer1) est ouvert pour recevoir des connexions externes qui pour la plupart des gens atterrissent ici n'est pas susceptible d'être vrai. Si vous voulez aller sur la route de la branche pourquoi ne pas simplement pousser une branche de temp à l'origine à distance et tirer cela de l'ordinateur2? Vous pouvez supprimer la branche distante dès que vous avez tiré, si vous ne voulez pas la conserver. Les branches en git sont tellement bon marché qu'il y a généralement peu de raisons de ne pas les utiliser. – indivisible

+0

@indivisible Je ne suis pas d'accord, il y a beaucoup de possibilités de connecter deux ordinateurs sur Internet aujourd'hui. La technique décrite dans la réponse peut être utile pour transférer un travail en cours d'un ordinateur portable à un bureau sur un réseau local. Même un service VPN virtuel comme Hamachi serait utilisé pour transférer des fichiers sur Internet n'importe où directement entre des ordinateurs exécutant git. – steampowered

+1

@steampowered, je suis sûr que cela peut être vrai pour certaines personnes/situations mais je pense qu'il vaut la peine de le noter pour les futurs lecteurs car c'est une exigence pour cette solution de travailler et de modifier votre environnement local pour accepter le trafic entrant non trivial configuration qui, à mon avis, est "exagérée" pour une tâche comme celle-ci. Si votre (vos) système (s) est (sont) déjà ouvert (s), alors utilisez cette réponse - ce n'est pas incorrect.Je pense simplement que la majorité des utilisateurs qui atterrissent ici ne seront pas dans une telle situation. – indivisible

6

Vous pouvez également exporter l'ensemble stashes local à un autre Compter comme suit

  • git pull à la fois sur votre ancien et nouveau répertoire git pour vous assurer que les deux ont les dernières modifications.
  • copier le.dossier git de l'ancien répertoire git au nouveau référentiel
2

Une autre option est de rsync le dossier .git d'un ordinateur à un autre ordinateur. rsync traite uniquement les modifications de fichier (plus rapide qu'une copie). Un inconvénient de cette approche est que les configs seraient également écrasées, ce qui peut ne pas être souhaitable si vous exécutez différentes config .git entre les deux machines. Mais vous pouvez surmonter cela en excluant les fichiers avec l'option --exclude en rsync. Dans l'ensemble, je pense qu'une solution Git native est plus propre, mais ce hack rsync pourrait être agréable pour quelqu'un pressé qui pourrait être plus familier avec rsync que git.

0

La commande de démarrage du poste d'origine:

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

ne fonctionne pas pour moi (pour une raison quelconque, il a créé des fichiers de patch inutilisables). Au lieu de cela je devais:

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

pour chaque cachette que je voulais transférer. Ensuite, je mis la pension « parent » au sein de file: /// portée du « enfant » repo, et fait ce qui suit, pour chaque planque commets:

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

Ceci est plus complexe, mais a fait l'affaire pour moi .

Questions connexes