把握行业变革关键节点,12 月 19 日 - 20 日,AICon北京站即将重磅启幕! 了解详情
写点什么

如何处理单个项目的多个代码版本

  • 2008-06-04
  • 本文字数:1227 字

    阅读完需:约 4 分钟

一旦产品发布了第一个版本,你的团队将面临下面的困境——如何在继续发布新版本的同时维护第一个版本。对于这个问题,Target Process 公司的 CEO 兼创始人 Michael Dubakov ,在“是否应该在项目中采用并行方式进行发布和迭代?”这篇文章中分享了他们的经验。

在Michael 的例子中,他打算对1.0 版本进行修复,继续1.5 版本的工作,并为2.0 版本开发新功能。同一个项目的工作应该由同一个团队来完成吗?在这样的团队中,是否该让某些开发人员发布2.0 版本,其他人从事1.5 版本的工作,并让Joe(具有牺牲精神的开发人员)挤出时间来修复1.0 版本的重要问题?Michael 得出的结论是:让浪费最小化,而且不在2.0 上进行开发。针对进行1.5 版本开发的程序员,我们减少了他们需要同时处理的任务,并尽量拖延作决定的时间(到2.0 版本开始的时候,一些现在看来2.0 所必备的功能可能已经不再需要了)。

根据 Steve Campbell 的经验,这个问题最好的解决方式是:将所有的任务(包括所有的版本)放置在单独的 Sprint Backlog 中。这样一来,任何一个团队成员都可以选取一个任务(不管是哪一个版本),然后开始工作。Steve 继续讨论了这种情况下的分支策略:要么不要任何分支(采用运行时切换机制来区分不同的版本),要么只在重新开发组件的时候再做分支。

来自 Eclipse 软件系统公司的 Matt Swaffer 采用的方法与之迥异。他的团队不发布补丁程序,实际上他们要保持主干的稳定,如果修复了 bug,他们会邀请用户下载最新的版本。另外,他们还会为每一个版本打上标记,一旦发生严重的 bug 可以回溯到原来的版本进行修复。他们的终极目标是每周发布新版本。

说到基于同一个代码库发布多个产品的问题,《 Implementation Patterns 》的作者 Kent Beck 谈到一个例子:他参与了两个项目,团队需要支持七个客户。除了核心逻辑之外,每个项目都有大量的自定义代码。其中一个项目为每个客户保留了独立的代码库,每当有新客户时,他们会克隆一个“最新鲜”的分支,并继续进行开发。正如 Kent 所指出的,这样一来,他们被合并所带来的工作量淹没了。而另外一个项目中,交付给每个用户的是单独的二进制文件,这种方式保证每个客户执行的都是自己需要的代码。Kent 认为这两个项目关键的不同之处在于:

关键在于找到方法推迟关联。我发现从一开始就要定好原则——我们将使用独立的代码库。这种方式减少了一些设计上的选择,但是仍然留有很大余地。还有另一个重要的原则,在第一个案例中我们不介意有一些重复的代码,如果能够明确如何消除重复代码,我们愿意这么做,但现在还没有,我们仍然希望能找到清晰的解决方案。

最后来自 N-BRAIN John A. De Goes 这样说:

分支是浪费的一种形式,我们的目标是消除分支。我们采用单独的代码库,只支持最近发布的一个版本,每次发布都强行推送给所有用户,并频繁发布(理想情况是,一次发布增加一个功能,或移除一个缺陷)。采用 SaaS 的方式实现起来会更简单。

查看英文原文: Handling Multiple Versions in a Single Project Team?

2008-06-04 21:041951
用户头像

发布了 479 篇内容, 共 181.4 次阅读, 收获喜欢 53 次。

关注

评论

发布
暂无评论
发现更多内容

基于YOLOv8的河道垃圾塑料瓶子识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!

申公豹

yolov8

不是拿着源码过来,就能二开,还需要注意这些

程序员郭顺发

MAZDA EZ-60领衔 长安马自达多款新车型亮相2025重庆车展

极客天地

Go 语言中的 Hot Path 优化:高性能优化实践指南

异常君

Go 高并发 高性能 优化

2025北京智源大会闭幕|黄铁军:构建物理智能体,具身智能目标是星辰大海

智源研究院

时序数据库 TimechoDB V2.0.4 发布 | 新增用户自定义表函数及多种内置表函数等功能

Apache IoTDB

2025 AICon上海站

IT蜗壳-Tango

吉他初学者如何自学吉他?Guitar Pro如何辅助新手掌握复杂的吉他弹奏技巧

阿拉灯神丁

吉他学习 编曲软件 Guitar Pro8 Mac乐谱制作软件 乐谱软件

Guitar Pro为什么被称为吉他编曲的绝佳软件?Guitar Pro编曲教程

阿拉灯神丁

吉他学习 吉他谱 编曲软件 Guitar Pro8 音乐创作

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

王二蛋和他的张大花

鸿蒙 os

我离职了,聊聊职场、大学、友情和爱情:人不能两次踏入同一条河流,生命只能倒着被理解,但却必须正着被经历

码哥字节

#职场思考

时序数据库 IoTDB 官方可视化平台 Workbench,一文全面了解!

Apache IoTDB

VMware VeloCloud SD-WAN 6.4 - 领先的 SD-WAN 解决方案

sysin

velocloud

鸿蒙仓颉语言开发实战教程:商城应用个人中心页面

幽蓝计划

AI 全栈开发实战营 - 第三章

9527

AI Agent驱动下的金融智能化:技术实现与行业影响

申公豹

AI Agent

三天吃透Java并发面试八股文

Geek_Yin

编程 程序员 java面试 Java面试题

低代码不是炫技,而是回归需求的必然答案

伤感汤姆布利柏

【重磅】JimuReport 积木报表 v2.0 版本发布

JEECG低代码

GitHub 数据可视化 免费报表 开源版本

React源码阅读(2)-fiber核心构建原理

溪抱鱼

【HarmonyOS 5】桌面快捷方式功能实现详解

GeorgeGcs

鸿蒙 开发工具 HarmonyOS HarmonyOS NEXT 实践分享

详解鸿蒙Next仓颉开发语言中的动画

幽蓝计划

Zerto 10.0 Update 7 - 适用于本地、混合和多云环境的灾难恢复和数据保护

sysin

Zerto

AI编码工具:面向现代开发者的分层指南

俞凡

人工智能

用 10 个 AI 工具创建独立开发团队

俞凡

人工智能

HarmonyOS运动语音开发:如何让运动开始时的语音播报更温暖

王二蛋和他的张大花

鸿蒙

透明LED广告屏租赁价格:探究成本

Dylan

广告 LED LED display LED显示屏 LED屏幕

通义灵码2.5 | 一个更懂开发者的 AI 编程助手

六月的雨在InfoQ

MCP Server AI 编程 通义灵码2.5 编程助手

【每天学点‘音视频’】GOP-关键帧间隔

小曾同学.com

ffmpeg 实时音视频 GOP B帧

吃透Java基础面试八股文

Geek_Yin

Java 程序员 java面试 Java面试题

如何处理单个项目的多个代码版本_研发效能_Mark Levison_InfoQ精选文章