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

Git 将存储导出到另一台计算机,git,Git,我需要一种方法将隐藏的零钱导出到另一台计算机 在电脑1上我做到了 $ git stash save feature 我正在尝试将隐藏修补程序获取到一个文件,然后将其导入到另一台计算机 $ git stash show -p > patch 此命令为我提供了一个文件,我可以将其移动到克隆此repo的另一台计算机上,但问题是如何再次将其作为存储导入。只需运行 git apply patchfile 然后,您只需从当前工作目录创建一个新的存储: git stash 或者,您可以使用以下命

我需要一种方法将隐藏的零钱导出到另一台计算机

在电脑1上我做到了

$ git stash save feature
我正在尝试将隐藏修补程序获取到一个文件,然后将其导入到另一台计算机

$ git stash show -p > patch

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

只需运行

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

git stash

或者,您可以使用以下命令从存储库(在计算机1上)创建分支:

提交您的更改:

git commit -a
然后将其添加为计算机2上的远程:

git remote add pc1 user@computer1:/path/to/repo
现在,您可以使用

git fetch pc1
现在,您可以按所需的方式导入提交;使用git cherry pick、git rebase或任何您喜欢的工具。。。 如果你想让它看起来像你刚刚做的一样,那么就应用git-stash;您可以使用git cherry pick--no commit.


如果计算机1和计算机2之间没有直接连接;您可以使用遥控器(如github或类似工具):

git push origin stashed_changes_branch
在计算机2上:

git fetch

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

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

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

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


总的来说,我认为本地Git解决方案更干净,但是对于那些可能比Git更熟悉rsync的人来说,这个
rsync
hack可能是个不错的选择。

原始帖子中的启动命令:

git stash show -p stash@{x} > patch_file
不适合我(由于某种原因,它创建了不可用的补丁文件)。相反,我不得不:

git stash apply stash@{x}
git commit
对于我想转移的每个藏品。然后,我将“父”repo放在文件:///reach of the“child”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

这是一个更复杂的问题,但对我来说确实奏效了。

如果你想将更改从一台机器移动到另一台机器,你可以在机器上提交更改,然后在他们的机器上进行软重置

办公室

git提交-m“-stash-”

厨房

git reset——软头~1

如何在SourceTree中导出存储:
  • 从您要使用存储的分支创建一个新分支“存储转移”
  • 把你的藏匿物用在它上面,并做出承诺

  • 单击提交并从中制作补丁,随身携带补丁文件

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

  • 操作/应用修补程序,选择模式:修改工作副本文件,推送应用修补程序 现在,您已经在当前工作环境中对修补程序进行了未提交的修改

  • 为当前回购进行新的储备


  • 您可以从一台计算机创建作为修补程序文件的存储,然后可以将该修补程序文件共享到另一台计算机

    将存储创建为补丁

    $ git stash show "stash@{0}" -p > changes.patch
    
    “stash@{0}”是存储的ref。它将使用最新的存储创建修补程序文件。 如果您想要不同的文件,请使用命令
    $git stash list
    查看您的文件列表,并选择要修补的文件

    应用修补程序

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

    $ git apply changes.patch
    
    如果有错误,您希望更改

    $ git apply changes.patch --reverse
    

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

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

    这就是我所做的,以完全恢复所有库存从一个回购到另一个。如果不能将它们放在同一台计算机上,则可以在创建后将隐藏标记保存在捆绑包中,并将引用列表和捆绑包复制到目标计算机

    从原始回购协议的根:

  • 获取隐藏引用的列表
  • 标记您的存储引用,以便您可以使用git fetch检索它们(标记名称不重要,如果存在冲突,请更改它。我使用了
    stash_uuu
    +逻辑存储引用中的数字)
  • 将逻辑引用按相反顺序转换为sha1哈希-我们稍后将使用它们
  • 保存该回购路径-也可供以后使用
  • refs=$(吉特储藏清单|切割-d:-f1)
    对于$refs中的ref;dogit标记隐藏${ref/[^0-9]}$ref;完成
    refs=$(git版本解析$refs | tac)
    oldpath=$PWD
    
    注意:这需要bash或兼容的shell(ksh,zsh应该可以…)如果shell不支持
    ${param//pattern}

    现在在新回购协议中,对于每个ref:

  • 从旧的repo获取ref(我们甚至不需要使用标记名,因为我们已经标记了它们,我们可以使用gitfetch检索它们)
  • 从ref重新导入隐藏,使用该ref的主题作为隐藏消息
  • 用于$refs中的ref;dogit获取$oldpath$ref;吉特储藏室-m“$(吉特)
    
    $ git apply changes.patch --reverse