gpt4 book ai didi

git - 在环境之间重复移动可更新的 Git 代码分支

转载 作者:太空狗 更新时间:2023-10-29 14:03:32 30 4
gpt4 key购买 nike

我正在尝试找出一种使用 Git 在两个断开连接的环境之间移植代码的方法。代码将在两个位置进行编辑,然后再 merge 在一起发布。理想情况下,我想从一个位置 (A) 导出“master”分支,然后将其作为“remote-dev”分支添加到另一个位置 (B) 的存储库中。之后,可以将“remote-dev”分支中的更改 merge 到第二个位置(B)的“master”分支中,为发布做准备。这种传输将定期重复,因此希望能够用更新的代码覆盖“remote-dev”并保留历史记录,并且仍然允许 merge 到“master”而不必重新 merge 以前 merge 的代码。此外,只有“master”分支应该从环境 A 中移出,因为还有许多其他正在积极开发的分支不应被复制。

这里的目标是实现自动化、可重复的过程。我希望能够设置一个批处理文件,每晚在环境 A 中导出一个分支。某人会将文件复制到环境 B 并将它们放在下车位置。另一个批处理文件将被安排在环境 B 中运行,它会拾取文件并将它们 merge 到环境 B 中的目标存储库中。

在“How do you merge two Git repositories?”和“How to import existing Git repository into another?”中都有很好的细节。不幸的是,两者似乎都没有涵盖我正在寻找的可重复性方面。

这两个讨论都提到“git merge”和“git subtree add”作为可能的解决方案,用于将分支划分到不同的存储库中。但是,两者都没有涵盖它的可重复性方面。是否有必要在重新 merge 之前删除目标分支,或者导入的分支是否可以 merge 到先前导入的顶部?此外,是否应该采取任何特殊步骤从环境 A 中仅导出“master”分支,以避免在环境之间移动任何多余的数据?

有没有人成功地尝试过这样的事情?

最佳答案

您将环境描述为“断开连接”。我假设您的意思是您不能将一个仓库添加为另一个仓库的远程仓库。解决方案是使用 git bundle

在 repo 1 中,您创建了一个捆绑文件。您将指定您想要从 master 的历史记录中创建的包。

如果需要,您还可以通过为 bundle 指定“起点”来使 bundle 增量。我的意思是,您可以说“如果您要导入这个包,您必须已经提交 ABC,因为它是包中第一个提交的父提交”。

在接收端,您添加捆绑文件,就好像它是一个远程文件一样,然后您可以从中获取并 merge 生成的引用,或者从pull它,或其他什么。就像 Remote 一样。唯一的问题是您不 push 到 bundle 。相反,您创建自己的 bundle 以发回。

这样就消除了图片中“断开连接”的方面。

如果你想打包 master 然后将它作为 remote-dev 接收,你可以在从包中获取时使用 refspec;或者您可以继续将其作为 remote-dev/master 获取,然后使用名为 rmeote-dev 的本地分支对其进行跟踪;或任何数量的其他变体。

无论您是否使 bundle 成为增量包,它都是可重复的,因为 fetch 始终知道它可能已经拥有它正在获取的历史记录中的一些对象。

因此,现在您只是在两个长期存在的分支之间进行同步,这与您用来获取定期供应商掉线或从其上游更新 fork 的模式非常相似。


顺便说一句,上面的答案假设除了断开连接的环境之外,您还有其他原因需要您描述的分支工作流。事实上,使用捆绑文件,您可以像使用连接的存储库一样工作,所以如果您假设需要一个 remote-dev 分支来处理分离,我不会打扰。分布式开发正是 git 的用途。

关于git - 在环境之间重复移动可更新的 Git 代码分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49671804/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com