Github 仅在开发分支中部署特定功能

Github deploy only specific features in development branch

所以我正在从 Github 中找出最简单的 branching/deployment 策略,它至少有一个 dev 和一个 release(master) 分支。 在看到 this answer 之后,我认为这非常接近我们所需要的。除了只能部署某些功能这一大问题。不是一切。

提供的 2 个选项 here 还不够好。这是一个常见的场景,每次都还原是很讨厌的。另外,我读到 cherry picking 还有其他问题,特别是因为 cherry picked 提交实际上是副本(这是真的吗?)

现在,我在想,如果我们开始研究新功能,我们创建一个分支,并将它们合并到我们选择的开发分支,我们可以将这些分支合并到发布分支(我们不是从开发分支合并到发布分支,而是从功能分支合并到开发和发布分支,这样我们就可以选择要发布的内容),这样我们就只会准备好需要的更改以供发布。我至少可以想到两个可能的问题:

所以,总而言之,我怎样才能保留一个开发分支,在那里进行一些更改,然后只将一些东西移动到另一个分支?。

非常感谢。

你绝对可以做到这一点。以下是我的建议:

  • 将所有分支都设为 master。这完成了两件事:
    • 您的分支基于生产,因此它已准备就绪
    • 您的分支中没有来自 dev 的尚未准备好发布的内容
  • 当你想发布一个分支时:
    • branch 合并到 master
    • 部署
    • master 合并到 dev 以使其保持最新。否则 dev 中的人们离生产中的东西越来越远。
  • 当你的分支完成,但你不想发布,合并到dev
  • dev 中等待的一切准备就绪时
    • dev 合并到 master
    • 部署

你会 运行 的事情是你正在 cool_feature 工作并且你的同事已经分支 fix_terrible_bug 你意识到 cool_feature 需要。在这种情况下,将 fix_terrible_bug 直接合并到 cool_feature 中并继续。当 fix_terrible_bug 完成后,它可以合并到 masterdev 即使你还没有完成 cool_feature,同样你可以合并 cool_feature 到即使您的同事正在继续 fix_terrible_bug 的工作。当另一个分支合并时,Git 会很好(尽管当你像这样合并很多东西时,避免变基,它们最终会造成混乱)。


附带说明一下,不要担心挑选 "copying" 事情。 Git 中的每个提交都是根据其内容、其父提交、当前时间等构建的包。当您挑选时,您将相同的内容放入新的父提交中,因此提交哈希必然更改,它实际上是一个独立于原始提交的新提交。这很好 - Git 擅长它的工作。除非您提交千兆字节的高清视频,否则您不会注意到使用了任何额外的 space,并且当 "original" 提交与您的 cherry-pick 连接路径时,它实际上是一个 no -op 并最终收集垃圾。