有没有一种方法可以在不使用版本控制分支的情况下“随时”开发/发布功能?

3
我的团队已经使用“一切都进入主干”方法进行持续集成一段时间了。我们正在研究改变这种做法,以便让我们能够在单个功能准备就绪时立即发布,而不必等待其他功能赶上(我们有多个团队同时开发不同的功能)。有很多关于如何使用分支策略(例如每个功能一个分支等)来实现这一点的示例,使用git等工具,这可能是我首选的方法。但是,经理们要求我们至少调查其他选项,因为他们担心分支策略可能会导致延迟的集成点,而我们希望避免这种情况。我不想让这变成持续集成/分支策略的讨论,所以我会尽量明确我的问题。

有人在没有运行多个版本控制分支的情况下发布功能的策略吗?例如,使用抽象分支或其他一些方式,在单个分支中具有不同状态的功能。如果有人有这种方法的经验(好或坏),我很想知道。


你们的管理人员是否熟悉适当的分布式版本控制?他们可能会因为使用 SVN/CVS 的不良经历而感到担忧,这使得分支和合并比必要的困难得多。也许可以向他们指出 http://www.joelonsoftware.com/items/2010/03/17.html。 - artbristol
确实存在合并恐惧症,源自VSS/TFS的经验。我们拥有大量关于如何使用分布式系统解决这些问题的信息(虽然感谢提供额外链接)。我几乎希望那个额外的定论能证明这种单一分支方法对我们行不通。或者我希望能够惊喜地发现证据表明它实际上是可行的。 - thecodefish
2个回答

1

使用抽象分支机制在具有传统架构的大型项目中不易扩展,因为所谓的“抽象层”并不总是容易/快速引入以隔离您的更改。

然而,本文提到的另一个想法是仅有少量分支,只有代表应用程序准备部署的提交。
这是分布式版本控制系统(如Git或Mercurial)可以轻松适应的,因为它具有发布机制(与分支无关),并且允许:

  • 不要发布(push)在本地存储库中进行的私有提交(这样您可以随意分支/实验,更重要的是,您可以rebase your work在官方分支上非常频繁和快速地进行,以确保您的工作不会与正在运行的应用程序分歧)
  • 一旦准备就绪,请仅在唯一的存储库上的“主干”或“发布”分支上发布(push)您的工作,该存储库充当所有修订版本“准备部署”的参考。

这并不妨碍将其他中间存储库推送出去,以便共享中间作品,但由于该工作已在本地官方分支之上进行了重新基础,因此即使进行开发工作也可以部署和测试。


很遗憾我没有足够的声望来投赞成票,但这个回答很有用 - 谢谢。我会看看是否还有其他回复。 - thecodefish

0

试试一种社交工程方法来满足经理不使用分支的愿望 - 使用每个功能在自己的GIT克隆中完成,并在准备好后推送到发布克隆中的GIT。同时,还可以有一个CI克隆来确保团队开发功能。

所以,开始一个新功能的工作流程是:

克隆CI仓库 实现功能,定期从CI仓库拉取 最后从CI仓库拉取,然后将功能推送到CI 从CI将功能推送到发布仓库。

如果需要,所有功能提交可以合并为一个大提交,或者以便于系统轻松选择推送的方式进行跟踪。

通过这种解决方案,您将永远不需要创建分支。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接