9 月 13 日,2025 Inclusion・外滩大会「开源嘉年华」正在限量报名中! 了解详情
写点什么

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

  • 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:041843
用户头像

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

关注

评论

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

Pipeline模式应用 | 京东云技术团队

京东科技开发者

pipeline 流程编排 管道模式

​网易游戏实时 HTAP 计费风控平台建设

TiDB 社区干货传送门

实践案例

苹果Mac电脑:2023年度mac app | Pixelmator Pro 图像编辑修图

Rose

Pixelmator Pro Mac修图软件 Pixelmator Pro破解 苹果软件下载

如何用Excel进行数据分析?Excel分析数据功能教程分享

Rose

Excel使用教程 Excel 数据分析 Excel 下载

OmniPlan Pro 4 for Mac:专业的项目管理规划工具

Rose

OmniPlan Pro 4 OmniPlan Pro许可证 Mac项目管理软件 OmniPlan Pro Mac中文版 OmniPlan Pro注册码

恢复的方式多种多样,总有一款适合你

TiDB 社区干货传送门

备份 & 恢复

文心ERNIE Bot SDK+LangChain:基于文档、网页的个性化问答系统

飞桨PaddlePaddle

人工智能 开发者 开发工具

在线教育小程序如何一键生成App

Onegun

在线教育 小程序转app

通俗解释一下“强静态类型”

伤感汤姆布利柏

苹果电脑FTP客户端:Transmit for mac 中文版 支持M/intel

Rose

Mac 软件 Transmit 5 Transmit破解版 FTP客户端

TiDB v7.5.0 LTS 升级必读 | 新特性补充说明

TiDB 社区干货传送门

版本升级 新版本/特性解读 7.x 实践

领先实践之鑫阳钢铁∣短流程钢铁企业废钢智能判级的行业标杆

用友BIP

废钢智能判级

CurveFS 助力网易云商,解决语音识别训练数据增长需求

OpenCurve

云计算 开源 文件存储 分布式文件存储 海量数据

Gestimer for Mac:轻量定时器,提醒大小事

Rose

Gestimer Mac中文版 Gestimer破解版 Gestimer下载 Mac任务提醒工具

TiDB知识点梳理 (PCTA 笔记分享)

TiDB 社区干货传送门

TiDB 底层架构 TiDB 源码解读

HTAP 还可以这么玩?丨TiDB 在 IoT 智慧园区的应用

TiDB 社区干货传送门

实践案例

推荐5款很牛的Paas平台编译构建工具

伤感汤姆布利柏

Linus:我休假的时候也会带着电脑,否则会感觉很无聊

极狐GitLab

Linux 开源 AI DevOps gitlab

使用TiKV-CDC实现rawkv集群的两地三中心

TiDB 社区干货传送门

实践案例 集群管理 数据库架构选型 数据库架构设计 6.x 实践

on duplicate key update引发的索引数据不一致问题

TiDB 社区干货传送门

故障排查/诊断

【12 月 9 号线上 Meetup 预告】兼容 MySQL 的原生分布式数据库,聊聊 TiDB 为何是 MySQL 5.7 停服后的新选择

TiDB 社区干货传送门

社区活动

解密 ArcGraph 分布式一致性:Raft 协议与分布式事务实现丨技术专栏

Fabarta

分布式事务 分布式系统 raft协议 分布式图数据库

DM同步为已有迁移任务增加新同步的表

TiDB 社区干货传送门

迁移 实践案例 管理与运维

从 Oracle 到 TiDB,全链路数据迁移平台核心能力和杭州银行迁移实践

TiDB 社区干货传送门

实践案例

从ClickHouse通往MySQL的几条道路 | 京东物流技术团队

京东科技开发者

MySQL 数据库 Clickhouse

TiDB-v7.5.0 DDL 启停特性分析

TiDB 社区干货传送门

版本测评 新版本/特性发布 新版本/特性解读 7.x 实践

详细了解大数据离在线混部架构模型

易程

大数据 Kubernetes 云原生大数据 离在线混部 大数据离在线混部

语言模型:GPT与HuggingFace的应用

华为云开发者联盟

人工智能 华为云 GPT 华为云开发者联盟

在线教育小程序正在成为教育行业的技术强兵

Onegun

小程序 在线教育 在线学习 小程序化

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