【问题标题】:Disable feature in master (git)禁用master(git)中的功能
【发布时间】:2013-11-26 14:13:36
【问题描述】:

我们正在feature/x 中开发一项功能。我们需要不时将此功能合并到master,并将master 合并回feature/x 以保持同步。 feature/x 分支也作为远程分支存在,因此这里变基不是一个很好的选择。

我们想禁用/隐藏master 中的实际功能,直到将来某个时候。事实上,我希望能够在master 中创建一个提交 K,以便通过将其隐藏在 UI 中来禁用正在开发的功能,但保留底层机制。

我还希望它能够正常工作,这样当我从 master 合并到 feature/x 时,我将获得除 K 之外的所有提交。此外,当我从 feature/x 合并到 master 时,提交K 仍应适用于 master,保持该功能隐藏。

我试过了

git co master
git commit -am "disable feature x for now"
    => created commit 12345678
git co feature/x
git merge -s ours 12345678

这可行,但当我这样做时,该功能会在 master 中重新启用

git co master
git merge feature/x

因此,似乎将-s ours 从master 合并到feature/x 并不会导致双向合并。所以每次我从feature/x 合并到master 时,我都必须再次禁用该功能,然后这个禁用提交将流回feature/x 等等。有没有更好的办法?

【问题讨论】:

    标签: git merge feature-branch


    【解决方案1】:

    问题是你真正想做的是一个变基。你可以为你所做的每个变基旋转新的分支,但根据你这样做的频率,这可能是不切实际的。

    这是一个额外的步骤,但您可以设置一个(非远程)分支feature/disable_x,其中仅包含禁用x 的补丁。然后当你合并feature/x 时,rebase 并合并disable_x。

    【讨论】:

    • 这确实有帮助,尽管它并没有完全按照我的意愿做,即合并两种方式,而不必比以往多做一个额外的禁用步骤。
    【解决方案2】:

    考虑使用功能标志(或feature toggles)。

    这允许代码在 master 上合并,但只有在切换某些标志后才可用(启用该功能)。

    优点很多:

    • 更轻松的代码管理(代码是实时的)
    • 如果出现问题,很容易回退:只需再次切换标志
    • 轻松逐步上线:仅为少数用户启用一项功能

    缺点:您必须添加一些代码来管理这些标志。但是根据您的语言/编码平台,已经可以使用支持此功能的库。

    【讨论】:

    • 谢谢。这实际上是我们最终使用的解决方案。它确实比基于版本控制的方法更灵活。
    猜你喜欢
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    相关资源
    最近更新 更多