



























这是一个创建于 534 天前的主题,其中的信息可能已经有所发展或是发生改变。
前提:手头上准备有一个项目 project 要开发,目前规划是会开发出一个基础版本,然后这版本上线后,基于该版本会按照不同的客户需求有一些差异不大的定制化修改,可能就会出现 project-A 、project-B 甚至是 C/D/E....等多个版本。
团队考虑了两种版本管理方式:
分支模式。 除了常见的 main/dev/release ,对于定制化的就从 main 拉出对应分支 project-A ... Z ,如果 A 有修改则拉出 feature 进行开发,开发测试完毕合回 project-A 里。 如果 main 有通用更新则按照情况从 main 合到 project-A ... Z ,同理如果 project-A 的一些功能验证过后按需也可以合回到 main 。
fork 模式。 基础版本正常开发迭代,有定制的需要时则从基础版本 fork 出一个 project-A ,它可以方便地随时同步上游仓库的修改,project-A 有被用户验证过后的功能也可以向上游仓库发起 merge 请求合到基础版本中
个人感觉分支模式到时候如果真的出现很多 project-X 分支的时候,有可能分支之间合并就乱了,也会把 git 的记录搞得很花。
另外解决怎么安排测试也是一个大问题
大家对以上两种模式有什么看法或建议? 或者有更合理的管理模式也可以提出供我们参考
1 zhuisui 2024 年 12 月 27 日对于 git 来说,你这两种模式没区别,都是 branch. 你这种需求——拆出去、合回来,用 branch 管理是最合适的,设计好各种条件下如何建分支就好了。不要用什么 cherry-pick 甚至多项目。 |
2 newaccount 2024 年 12 月 27 日1 分支模式 |
3 dalaoshu25 2024 年 12 月 27 日交付给客户的当然是 release 分支,里面可以有一些针对客户的定制,跟主线无关的。 |
5 xingheng 2024 年 12 月 27 日无脑 fork ,定制需求更新会很低,分开管理最好,分开了也可以合并基础版本的代码,不冲突。 |
8 liuliuliuliu 2024 年 12 月 27 日是不是应该考虑做成功能开关?不同的客户,只是哪些功能打开关闭而已 |
9 Jonz 2024 年 12 月 27 日我们应该算是分支模式。 |
10 Sainnhepark 2024 年 12 月 27 日可以考虑把部分定制化需求用配置文件控制,如果差异确实较大,可以考虑把公共的实现放到一个 common 库,然后构建的时候构建多个版本的程序 |
11 pangzipp 2024 年 12 月 27 日有没有可能 main 作为基准。对外提供接口 |
12 0x5c0f 2024 年 12 月 27 日 |
13 bfdh 2024 年 12 月 27 日不要拉分支,不同分支会越差越多,最后结果就是不同分支之间的修改完全没法同步/合并。 |
14 hzymyp 2024 年 12 月 27 日之前是按照多个分支来管理的,后来发展成了近 30 个分支的树状结构,实在受不了又改成功能开关模式了 |
15 LemonNoCry 2024 年 12 月 27 日可以用分支模式,可以用目录来区分 比如 客户 A: A/dev ,A/release ,A/preview 就是合并会比较繁琐 但是一般情况不会升级,只有客户反馈等等,比如标准版已经加了其他功能,客户 A 的版本还是老版本,没有特别一般不会进行升级, |
16 PolarisY 2024 年 12 月 27 日 via Android搜一下 gitflow ,基本是业内共识规范,可以在其基础上客制化。至于你提到的切换问题,可以 clone 多个本地库互不影响呀。 |
17 HtPM 2024 年 12 月 27 日巧了,我们公司目前就是用的你提到的第一种分支模式。有一个 master 分支作为公司的线上发布 Release 版本(作为里程碑),比如 OEM 厂商 1 需要定制一个功能,就基于 Master 分支新建另一个分支,比如名称取为:master-oem1 。目前已经 144 个分支了。这种模式下暂时也没什么大问题,不过偶尔需要合并大量的代码的时候会有点痛苦,不过基本上问题不大(因为我们是小公司[doge]) |
18 cnnblike 2024 年 12 月 27 日搞一个门禁,把所有 master 上的 commit cherry-pick 到定制分支上 |
19 xavierchow 2024 年 12 月 27 日2 楼 @newaccount 讲的很对,相信我,一旦定制化以后,你不会有机会 merge 回来了,不同客户的需求下,分支模式并不适合。 |
20 k9990009 2024 年 12 月 28 日 via Android现在用的分支模式。客户的代码落后 N 个大版本了,除非不更新。实际上一些好用的功能和优化会,不同分支相互合并。太痛苦了。应该考虑模块化,插件化去做 |
21 xiejay97 2024 年 12 月 28 日 via Android最好不要用分支,会有各种各样的坑,比如包管理器的依赖不一样,而且业务代码本身逻辑是连续的,基本上定制就很难再合并,只会合并 fix 类的 commit 。 |
22 vxf 2024 年 12 月 28 日通用的东西抽出来一个 base repo |
23 Belmode 2024 年 12 月 28 日做过类似的,都是通过 branch 来管理的。 最恶心的是,即使 A 业务分支已经存在的需求,B 业务分支也要,很多时候是无法简单 merge 或者 cherry-pick 的,只能手动挑选合并代码,好多定制的地方都不一样,随着时间发展,不同甲方的要求越多,就相当于一个新项目了,这时候就可以拉新仓库了。 我和你说,这种需求往往都有很多坑,版本一个控制不好,就 G 了。 |
24 houshengzi 2024 年 12 月 30 日@zhuisui #1 是的,用 branch 管理会比较方便,在同一个仓库中操作就行了。果然真正的银弹并不存在 |
25 houshengzi 2024 年 12 月 30 日@newaccount #2 还真有 project-A 同步回 main 的需求。因为会有一些 feature 在 A 中经过验证了后,会合回到 main 中,再以新功能的形式宣传给其他“潜在”客户 |
26 houshengzi 2024 年 12 月 30 日@dalaoshu25 # 是,也可以从 release 中拉出定制分支。 文中说 main 是因为我司这里也一直是 main 分支 ≈ release 分支的 |
27 houshengzi 2024 年 12 月 30 日@nikenidage1 #8 可能有些不是功能开关能完成的。之前项目就遇到过有些排序方式客户 A 要求是时间倒序,客户 B 要求的几个列点击切换排序 |
29 houshengzi 2024 年 12 月 30 日@0x5c0f #12 感谢。你这个就是 branch 模式了,我们的基础版本也是类似的 git 规范。现在是考虑怎么管理从基础版衍生出的定制化项目 |
30 houshengzi 2024 年 12 月 30 日@HtPM #17 感觉你们业务也很庞大啊,已经 144 个分支。那你们的整个流程大概是什么样的?有没有从定制分支往回合的情况? |
33 zhuisui 2024 年 12 月 30 日再补充一些各类现实情况: |
34 0xD800 2024 年 12 月 30 日 via Android有相同需求。 衍生工程新增一个名为 upstream (基础工程)的 remote origin ,如果涉及基础工程的变更,需要把变更推送到 upstream ,其他工程可以更新本地 upstream 代码,然后基于 dev/release 分支创建一个更新分支,再 cherry-pick 最新的 commit ,然后合并到 dev/release 。 |
35 2han9wen71an 2024 年 12 月 30 日我们是主产品一个仓库,每个客户有一个组织,定制化业务都是单独的仓库。 但是我们系统是插件化的,用户提出的需求如果有共性,我们会考虑合并到主产品中,否则都是以插件加载到平台中 |
36 HtPM 2024 年 12 月 30 日@houshengzi 有从定制分支往回合并的情况,如果两个分支差异过大,需要多个同事配合合并,谁修改的部分会让谁来合。 |
37 liujavamail 2024 年 12 月 30 日@2han9wen71an 请问下插件化使用的什么技术? 我们目前也在考虑选型, 项目是 java SpringBoot 的, 不同客户的需求不一样, 还有增值模块,得按需加载 |
38 dxddd 2024 年 12 月 31 日我首先意识到这并不是个 git 问题,而是一个工程化的问题。就是我有一个通用能力,但是也有若干定制能力。会发生如下情况: |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。