【问题标题】:How to work with more than one version of the same application at the same time in git?如何在 git 中同时使用同一个应用程序的多个版本?
【发布时间】:2019-11-28 16:48:45
【问题描述】:

我有一个应用程序将用于很多客户,目前我们有两个版本,一个是核心版本,另一个将由我的一个客户使用。目前我们有两个分支(master、client_1),它们相似但不同。

我的问题是,如果我只为 client_1 更正某些内容,这很容易,我只需要在那个分支中提交即可。但是如果我对两者都进行了更正,我现在不知道如何“合并”它,因为如果我合并我的 git 会尝试合并所有内容,而不仅仅是我的更正。

现在,假设我的应用程序扩展到 15 个客户端,每个客户端都有一些不同的小变化,但又是不同的。如何控制此类问题?

【问题讨论】:

    标签: git branch git-branch


    【解决方案1】:

    我认为您正在寻找的是“樱桃采摘”。那个小改动,你在主分支上提交……然后在客户端分支上,你挑选修订版。

    【讨论】:

    • 那么,当我挑选樱桃时,我要对我的客户端分支做出哪些更改?
    • 您只会继承在该版本中引入的更改。这就像应用补丁一样,所以甚至文件都不会被带过来......只有您正在挑选的修订版本与其父版本之间的更改会被考虑并带过来。
    • 酷,这看起来像我想要的,但我不习惯“修订”这个词,是我应该搜索的东西吗?你认为我可以为我的应用程序以这种方式工作吗?即使有很多客户?
    • 修订是您在提交某些内容时创建的内容。一个新的修订被创建...然后如果你在一个分支上工作,分支 pointer 被移动到这个新的修订。当然......你可以这样工作......但我认为如果你有一个带有“发布代码”的主分支和一个你正在测试东西的开发分支会更好向上。您可以挑选东西到主分支,然后让所有客户端分支合并主分支,而不是挑选相同的修订版 15 次。这其实很“艺术”。不同的开发者使用不同的流程。
    • 对....但至少您有一个 common 分支(和修订版)...您必须通过挑选樱桃来管理 15 个分支上的 15 个单独修订版在每一个上。不要误会我的意思:这在技术上都是可行的……只是不是最好的方法。但是,如果您愿意,请随意走这条路。
    【解决方案2】:

    如果您可以安排客户特定的“化妆品”更改,则应在特定于客户的分支或从客户端分支分支的修复分支上进行。

    哲学是这些更改永远不会合并回主分支。

    在理想情况下,主分支上的所有更改都应该可以安全地合并到所有客户端产品分支,但您可能需要在接受它们之前进行额外的测试阶段。

    如果进行了更改并签入到主要或特定其他客户端所需的客户端分支,那么cherry-pick 就是方法。

    如果在 main 上发现不需要的客户端编辑,那么您可以回滚 main,或者应用另一个更改来反转它。然后根据需要将其挑选到应有的位置。

    Git cherry -v 将向您显示哪些更改可以在分支之间复制,而 git cherry-pick 将让您选择特定的更改集,或一些相关的更改以单独合并。

    请注意,您的默认常规流程不应涉及精选,因为更改的两个实例将具有不同的哈希值。

    【讨论】:

    • 你可能是对的,我的主人应该总是拥有我其他分支将使用的东西。但是我实现我的主人的方式是另一种客户,也许我的主人甚至会是我最大的分支......所以你建议我在我的主人中删除我不会在其他分支中使用的东西吗?我应该为每个客户端分支都有一个修复分支吗?
    • 通常情况下,用户可以转到目标并合并来自源的更改,因此您如何命名您的分支,以及您和用户如何使用这些名称几乎取决于您。可以将您的主分支构建为可行的“香草”产品是有道理的,但有时这是不可能的,香草只需要成为另一个客户。
    • 好吧,说得有道理,恐怕我不能创造一个“可行的香草”,我会学习如何使用cherry-pick。但是我应该为我的客户分支设置一个“修复分支”吗?
    • 取决于您对“分支满意”的程度、工程师数量等。有些人喜欢每个缺陷 1 个分支。如果您知道缺陷是针对特定客户端的,请从那里分支,然后再合并回来。如果工程师顺便修复了其他问题,请将其作为单独的更改签入,然后可以从修复分支或客户端分支中将其挑选到主分支。
    • 哇,这看起来很激烈!我会有一千个分支,哈哈。因此,如果我做对了,我会为每个缺陷创建一个新分支(要进行的错误/更正)?合并回来后,我会删除那个分支,对吧?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多