【发布时间】:2018-09-15 05:50:08
【问题描述】:
我正在尝试制定一种使用 Git 在两个断开连接的环境之间移植代码的方法。代码将在两个位置进行编辑,然后合并到一起发布。理想情况下,我想从一个位置 (A) 导出“master”分支,然后将其作为“remote-dev”分支添加到另一个位置 (B) 的存储库中。之后,可以将“remote-dev”分支中的更改合并到第二个位置(B)的“master”分支中,以进行发布准备。这种转移将定期重复,因此希望能够用更新的代码覆盖“remote-dev”,并且仍然保留历史记录,并且仍然允许合并到“master”,而不必重新合并以前合并的代码。此外,只应从环境 A 中引入“主”分支,因为将存在许多其他正在积极开发的分支,不应复制。
这里的目标是实现自动化、可重复的过程。我希望能够设置一个批处理文件,每晚在环境 A 中导出一个分支。有人会将文件复制到环境 B 并将它们放置在放置位置。另一个批处理文件将被安排在环境 B 中运行,它会拾取文件并将它们合并到环境 B 中的目标存储库中。
“How do you merge two Git repositories?”和“How to import existing Git repository into another?”都有很好的细节。不幸的是,两者似乎都没有涵盖我正在寻找的可重复性方面。
两个讨论都提到了“git merge”和“git subtree add”作为可能的解决方案,用于将分支光栅到不同的存储库。但是,两者都没有涵盖它的可重复性方面。是否有必要在重新合并之前删除目标分支,或者导入的分支是否可以合并到先前导入的顶部?另外,是否应该采取任何特殊步骤从环境 A 中仅导出“master”分支,以避免在环境之间移动任何多余的数据?
有没有人成功地尝试过这样的事情?
【问题讨论】:
-
你说的这个“remote-dev”分支与git的远程跟踪分支有什么不同?我可能遗漏了一些东西,但在我看来,您正在描述标准的 git 操作程序。您不仅限于单个远程,所有存储库(您称它们为“环境”)都是对等的,即使它们通常最方便地被视为层次结构。
-
这些环境是完全独立的网络,无法直接相互交互。从一个到另一个的任何文件都必须使用便携式媒体手动复制。
-
使用
git bundle进行sneakernet传输,其描述的第一句话是“有些工作流要求在一台机器上的一个或多个开发分支复制到另一台机器上,但两台机器不能直接已连接,因此无法使用交互式 Git 协议(git、ssh、http)。” -
附注虽然我的问题属于它所在的位置,但我上面的其余回答最好作为对 Mark Adelsberger 的目标答案的评论来阅读。我认为您只是想使用 git,因为它本来就是要使用的,而且对运动鞋网的需求非常罕见,以至于您之前没有遇到任何指向
git bundle的指针。
标签: git merge git-merge git-subtree