2010-10-19 90 views
203

我需要一种方法将存储的更改导出到另一台计算机。将存储导出到另一台计算机

Computer1上我做了

$ git stash save feature 

我试图让藏补丁文件,然后将其导入到另一台计算机

$ git stash show -p > patch 

这个命令给了我一个文件,我可以移动到另一台电脑中,这个repo被克隆,但问题是如何再次将它作为存储导入。

感谢

回答

206

您可以通过简单地运行

git apply patchfile 

更新补丁文件(不提交的修改还)然后,你可以简单地创建从当前工作目录中的一个新的存储:

git stash 
+1

@Marcelo A:很高兴听到,但请点击答案投票数字下方的大号复选标记来回答您接受的答案。这样你的问题将被标记为已解决。 – poke 2010-10-19 21:55:41

+2

请注意,系统将不会让OP将答案标记为“已接受”,直到问题提出时已经过去了一段时间(我认为是15分钟)。 – 2010-10-19 21:58:02

+10

看完这个答案后,我想知道的是如何从我所有的藏品中选择一个特定的藏匿处。答案就在这里:http://stackoverflow.com/a/1910142/1148702。在这种情况下,我最终做了:'git stash show'stash @ {0}“-p> patch'而不是OP的第二个shell命令。 – 2016-03-16 15:03:23

10

或者你可以从你的存储器(在计算机1上)创建一个分支,使用

git stash branch stashed_changes_branch 

提交更改:

git commit -a 

然后将其添加为远程计算机2:

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

现在你可以检索使用

git fetch pc1 

远程信息现在你可以以您想要的方式导入提交;使用git cherry-pickgit rebase或任何你喜欢的东西... 如果你想它看起来像你刚才那样git暗藏申请;你可以使用git cherry-pick --no-commit。


如果你有电脑1和电脑2之间没有直接的联系;你可以使用一个遥控器(如GitHub的或类似的东西):

git push origin stashed_changes_branch 

和电脑2:

git fetch 
+1

这假定源系统(computer1)是开放的,可以接收大多数人登陆的外部连接这里不太可能是真实的。如果你想走分支路线,为什么不把温度分支推到远程原点并从计算机2中取出?如果您不想保留它,可以在拉出后尽快删除远程分支。 git中的分支很便宜,通常没有理由不使用它们。 – indivisible 2016-09-27 06:45:15

+0

@indivisible我不同意今天有很多机会连接互联网上的两台电脑。回答中描述的技术可能有助于将正在进行的工作从笔记本电脑传输到LAN上的桌面。甚至像Hamachi这样的虚拟vpn服务也可以用来在运行git的计算机之间直接在互联网上传输文件。 – steampowered 2017-07-18 13:41:59

+1

@steampowered,肯定它可能适用于某些人/情况,但我认为这是一个值得注意的未来读者的观点,因为这个解决方案的工作和修改本地环境/系统接受传入流量的硬性要求并不重要在我看来,这种配置对于像这样的任务是“过度杀伤”的。 如果你的系统已经打开,那么一定要用这个答案 - 这是不正确的。我只是觉得大部分登陆这里的用户都不会遇到这种情况。 – indivisible 2017-07-18 13:52:06

6

或者你可以将整个本地藏匿导出到另一个compter如下

  • git pull在你的旧的和新的git目录上,以确保两者都有最新的变化。
  • 复制。从旧的git目录新的存储库git的文件夹
2

另一种选择是rsync的从一台计算机.git文件夹复制到另一台计算机。 rsync只处理文件更改(快于复制)。

这种方法的一个缺点是配置也会被覆盖,如果你在两台机器之间运行不同的.git配置,这可能是不希望的。但是你可以通过rsync中的--exclude选项排除文件来克服这个问题。

总的来说,我认为原生Git解决方案更干净,但这种破解可能对于那些可能比git更熟悉rsync的人来说很不错。

0

从原岗位的启动命令:

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

并没有为我工作(由于某种原因无法使用创建补丁文件)。相反,我不得不:

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

我想转移每个藏匿。然后,我把文件中的“父”回购:///前往“孩子”回购,并做了以下内容,每个藏匿承诺:

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

这是比较复杂的,但做的把戏我。

相关问题