将存储导出到另一台计算机

时间:2010-10-19 21:41:46

标签: git

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

在Computer1上我做了

$ git stash save feature

我正在尝试将存储补丁发送到文件,然后将其导入另一台计算机

$ git stash show -p > patch

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

由于

10 个答案:

答案 0 :(得分:254)

您只需运行

即可应用补丁文件(尚未提交更改)
git apply patchfile

然后,您只需从当前工作目录中创建一个新存储:

git stash

答案 1 :(得分:14)

或者你可以使用

从你的藏匿处(在计算机1上)创建一个分支
git stash branch stashed_changes_branch

提交您的更改:

git commit -a

然后将其添加为计算机2上的遥控器:

git remote add pc1 user@computer1:/path/to/repo

现在您可以使用

检索远程信息
git fetch pc1

现在您可以按照自己的方式导入提交;使用 git cherry-pick git rebase 或任何你喜欢的... 如果你希望它看起来像你刚刚做了 git stash apply ;你可以使用 git cherry-pick --no-commit。

如果您在computer1和computer2之间没有直接连接;你可以使用遥控器(如github或类似的东西):

git push origin stashed_changes_branch

并在计算机2上:

git fetch

答案 2 :(得分:14)

您可以从一台计算机上创建隐藏文件作为补丁文件,然后可以将该补丁文件共享给另一台计算机。

创建存储为补丁

$ git stash show "stash@{0}" -p > changes.patch

“存储@ {0}”是存储的参考。它将创建具有最新存储的补丁文件。 如果您要使用其他命令,请使用命令$ git stash list查看存储的列表,然后选择要修补的存储。

应用补丁

现在将存储的文件转移到另一台计算机上,并将其粘贴到项目的根文件夹中。 然后运行此命令

$ git apply changes.patch

如果有错误,您想撤消更改

$ git apply changes.patch --reverse

答案 3 :(得分:9)

或者,您可以将整个本地存储器导出到另一个计算器,如下所示

    旧的和新的git目录上的
  • git pull,以确保两者都有最新的更改。
  • 将.git文件夹从旧git目录复制到新存储库

答案 4 :(得分:3)

另一个选项是rsync .git文件夹从一台计算机到另一台计算机。 rsync仅处理文件更改(比副本更快)。

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

总体而言,我认为原生Git解决方案更干净,但这个rsync黑客对于匆忙可能比git更熟悉rsync的人来说可能会很好。

答案 5 :(得分:1)

如何在SourceTree中导出存储:

1)从要使用Stash的分支中新建一个分支“ StashTransfer”

2)将您的存储区应用于该存储区并进行提交

3)单击您的提交并对其进行补丁,然后将补丁文件随身携带。

4)转到其他存储库,选择您在1)中刚刚使用的同一个父分支

5)操作/应用补丁,选择模式:修改工作副本文件,按应用补丁 现在您在当前的工作环境中尚未对补丁进行修改

6)为当前回购创建新的存储

赢!

答案 6 :(得分:1)

存储是基本提交和索引之间工作树的特殊合并提交。一种方法是将每个保存为单独的补丁,签出隐藏的第一个父项,从两个补丁中恢复索引和工作树,最后恢复隐藏(似乎有一个答案是这样的)。

这是从存储中完全重新创建所有信息所必需的,如果您不关心该信息,则至少应在恢复之前签出存储的第一父级,以避免冲突并跟踪存储的创建位置。

这是我将所有存储从一个存储库完全还原到另一个存储库的工作。如果您不能将它们存储在同一台计算机上,则可以在创建它们后将存储标签保存在捆绑软件中,然后将引用列表复制并捆绑到目标计算机。

从原始存储库的根开始:

  1. 获取隐藏引用列表
  2. 标记您的存储引用,以便您可以使用git fetch检索它们(标记名称不匹配,如果有冲突,请更改它。我在逻辑存储引用中使用了stash_ +数字)
  3. 以相反的顺序将逻辑引用转换为sha1哈希 -我们稍后将使用它们
  4. 保存该回购路径-也供以后使用
refs=$(git stash list|cut -d: -f1)
for ref in $refs; do git tag stash_${ref//[^0-9]} $ref; done
refs=$(git rev-parse $refs|tac)
oldpath=$PWD

注意:这需要bash或兼容的shell(ksh,zsh应该做...)。如果您的shell不支持stash_$((i++))

,也可以增加一个变量,例如${param//pattern}

现在在新的回购中,每个引用:

  1. 从旧仓库中获取引用(我们甚至不需要使用标签名称,因为我们已经对它们进行了标签,因此可以使用git fetch对其进行检索)
  2. 使用该引用的主题作为隐藏消息,从引用中重新导入隐藏文件。
for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done

答案 7 :(得分:0)

来自原始帖子的启动命令:

git stash show -p stash@{x} > patch_file

对我不起作用(由于某种原因,它创建了无法使用的补丁文件)。相反,我不得不:

git stash apply stash@{x}
git commit

我要转移的每个藏匿处。然后,我放置了父母的父母。在文件中的repo:///'孩子的范围' repo,并为每个存储提交执行以下操作:

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

这个比较复杂,但对我来说很有把握。

答案 8 :(得分:0)

如果要将更改从一台计算机移至另一台计算机,则可以始终在计算机上提交更改,然后在其计算机上进行软重置。

办公室

git commit -m "-stash-"

厨房

git reset --soft HEAD~1

答案 9 :(得分:0)

git --no-pager stash show -p > patch

将隐藏的更改复制到补丁文件

git apply path/to/the/patch/file

应用补丁文件中的存储

以下 shell 脚本允许用户将所有隐藏文件从一个文件夹复制到另一个文件夹。 https://gist.github.com/senthilmurukang/29b55a0c0e8694c406991799153f3c43