git - 哪个 git 工作流用于产品开发和产品定制
问题描述
我们已经使用git-flow
了一段时间来开发软件框架。我们在一个存储库中拥有master
和分支。development
最近,不同的客户开始对购买框架感兴趣,这需要为每个客户定制框架。
到目前为止,我们feature-customerXYZ
从 master 为每个客户分支了一个新分支,在那里进行了定制,并在定制完成后保持分支开放(这可以防止定制对产品master
/development
分支的“感染”)。
与此同时,框架本身的开发继续使用产品、、、和分支上通常的 git- master
flowdevelopment
工作流features
。hotfixes
release
在这种情况下会发生两种常见情况,我认为我们的工作流程无法以最佳方式处理:
分支的开发
feature-customerXYZ
可以包含值得在产品master
/development
分支中实现的提交。由于feature-customerXYZ
分支永远不会关闭,因此这些提交必须是rebased
或cherrypicked
到产品分支,这需要在自定义之后进行额外的工作并且容易出错。feature-customer
在分支打开时发现的修补程序git-flow
通过将修复后打开的hotfix
分支仅合并到产品master
和development
分支来处理,但不会合并到打开的feature-customer
分支中(更准确地说:它们没有合并到所有打开的feature
分支中)。
是否有一个 git 工作流程可以简洁地处理这个问题?是否有一个聪明的替代方案来代替merge
,cherrypick
或者rebase
分别提交到产品master
/develop
或开放feature
分支?
解决方案
虽然理论上可以按照@VonC 的建议在专门的分支机构中保持客户偏差,但我敢说这在技术上非常困难并且无法扩展。
是的,你可以有一些工作(在 Jenkins 或其他东西中)会自动调整你对 master 分支的偏差,但是当涉及到工具时,你就得靠自己了。至少要为以下情况做好准备:
- rebase 会因冲突而失败- 很简单,git 会让你知道
- rebase 会成功,但结果会包含逻辑冲突 - 这需要良好的测试覆盖率,因为没有工具能够警告您
相反,我建议尽量减少偏差,然后将它们并排放在一个分支中。
如果您的项目由模块组成,这通常是可能的。您没有提及您项目的任何细节,但大多数语言都支持某种形式的模块化,所以我希望这也是您的情况。
这样,您可以尝试将偏差的扩展点集中到最小模块(最好是一个)中,并在项目中拥有这些模块的多个变体。
优点很明显:
- 很简单
- 您的 CI 易于配置以一次构建所有模块(=客户偏差)
- 您可以对它们运行测试,并轻松确定哪些测试是针对单个客户的,哪些是通用的,哪些是特定于偏差功能而不是客户的
- 此外,您不必因此锁定您的分支模型,并且仍然可以使用 git-flow 或任何适合您需要的东西
唯一的缺点是,当你只为一个客户发布你的项目(带有标签和其他仪式)时,你也为所有其他客户做这件事。这通常没什么大不了的,另一方面,它激发了特征方面的偏差,这很好。
为了尽量减少偏差,我推荐以下技术:
- 一些偏差可以通过配置选项更好地表示
- 其他可能是特定于功能而不是特定于客户
- 最好的是,一些偏差可能会被拒绝——尽管这很少可能
总结一下 -尽量减少偏差并并排构建它们。
将您的代码库扩展到多个主分支(每个客户)将很快变得无法维护。
推荐阅读
- python - numpy.array() return [list() list() list()]
- javascript - Render 'async' function return value in render method (React)
- node.js - Card type is not supported - paytabs
- spring - How to write to Azure Blob with Spring Batch?
- javascript - retrieving JSON data to another webpage using DETAILS button
- c# - Send HttpListenerRequest to another website
- java - Discord 机器人如何在多个服务器上交换数据?
- flutter - 模拟颤动的 z-index 效果
- python - 从 php 运行 python + scrapy
- css - 在不同的浏览器中应用不同的 CSS