V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
MXXXXXS
V2EX  ›  问与答

不同的项目版本用 git 分支还是变量判断来管理?

  •  
  •   MXXXXXS · 2021-10-18 16:11:55 +08:00 · 2311 次点击
    这是一个创建于 1110 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司的一个项目,有一个通用版本,对于不同客户基于这个通用版本要改一些东西

    领导的想法:用变量判断,同一份代码方便维护

    我的想法: 一个通用版本分支,其他版本各一个 git 分支,通用版本作为 base,每次通用版本加功能别的分支可以 rebase 上去

    现在只有一家客户,领导用了变量判断,我觉得很脏,应该用分支管理,否则以后客户一多版本增加,一有差异功能都需要判断,分散在整个项目里很乱

    想问一下大家都是怎么做的?
    21 条回复    2021-10-19 02:22:39 +08:00
    gaoli1992
        1
    gaoli1992  
       2021-10-18 16:17:53 +08:00
    我现在接手的项目之前的团队就是你这么做的,有一个 base 版本,然后会维护多个私有化版本

    但是随着版本功能的推进就会发现,base 版本向私有化版本合并的工作量越来越大,后来交接到我们手上,更是由于工作量太大,就只要固定了私有化版本,放弃了更新。

    当然也有之前团队也得就是屎山代码的原因。
    AoEiuV020
        2
    AoEiuV020  
       2021-10-18 16:20:52 +08:00
    我们是用分支,
    不过有一点和你们的情况不一样,我们客户分支是有限维护,
    只修 bug 或者客户定制的功能,不持续合并新功能,客户没提问题了这分支就不再更新了,
    zoharSoul
        3
    zoharSoul  
       2021-10-18 16:21:51 +08:00
    我没做过这种工作, 建议不要干乙方, 趁早跑路. :P

    如果要做的话我选择变量
    dyxLike
        4
    dyxLike  
       2021-10-18 16:27:42 +08:00
    定制化版本的功能特性到后面可能会和 base 版差距很大, 我们之前项目用的分支形式, 到最后就只修 bug 不更新了
    del1214
        5
    del1214  
       2021-10-18 16:44:34 +08:00
    不管是变量还是分支,都很难受,跑路才是正解
    gam2046
        6
    gam2046  
       2021-10-18 16:44:44 +08:00
    还是和构建工具有一点关系,比如像 Android 这样的,Gradle 本身支持一定程度的变体构建,那么代码中做好一些抽象,我觉得比用变量判断和分支都方便。

    如果非要这两种里面选择,还是看非通用版本预期的维护时间,时间长的话,通用版本 marge 到特定版本会非常痛苦,通用版本的新代码很难考虑到以前代码的兼容性。
    NotFoundEgg
        7
    NotFoundEgg  
       2021-10-18 16:45:23 +08:00
    千万别用变量 后面逻辑改动会越来越频繁 需求会越来越奇怪 不同业务的逻辑冲突 变量根本加不上
    而且万一以后客户量上去了再拆会更痛苦的
    chenluo0429
        8
    chenluo0429  
       2021-10-18 17:17:40 +08:00   ❤️ 1
    选用分支,你可能会遇到一下情况:
    1. 当你在通用分支的修改,分支 AB 可以直接合并;分支 C 完全无法合并,需要手动修改;分支 D 可以合并,但是功能不正常;分支 E 不需要合并。
    2. 你的修改产生了一些 bug,你需要在 ABCDE 分支上分别修改,因为它们的代码存在差异,修改方案并不能完全通用,有些分支可能没有问题;
    3. 不同分支之间的依赖渐渐有了差异,为了方便地切换工作,你的硬盘上每个分支都有了一个独立的项目文件夹,你需要打开 3 、4 个 IDE 来同时处理不同分支上的同一个问题
    ...

    脏来自于对于客户需求的无底限妥协,无论你选择的是分支还是变量,最后都逃不过屎山的命运。
    importcode
        9
    importcode  
       2021-10-18 17:23:36 +08:00
    无论分支还是变量都逃不过, 后续客户多了后差异越来越大, 考虑一下通用模块做标准化,按功能添加逻辑判断而不是按客户,定制部分独立为可插拔模块单独维护
    cs419
        10
    cs419  
       2021-10-18 17:33:18 +08:00
    对项目 fork 进入维护模式
    不加新功能 只做缺陷维护
    Vindroid
        11
    Vindroid  
       2021-10-18 17:35:45 +08:00
    看客户需求都是买断版本制的,那就 branch,后期只做 bug 修复,不跟随 base 进版。如果客户的版本也是要随 base 进版,那还是变量控制吧,至少进版不会恶心到开发,测试量也不会增加太多,做好客制化的控制,代码上还是能接受的。另外核心功能是绝对不能变更的,只能扩展、新增,不能修改、删除。
    bk201
        12
    bk201  
       2021-10-18 17:42:47 +08:00
    只增加不做修改,除非是 BUG,至于不同的客户做权限功能管理就完事了。
    Vegetable
        13
    Vegetable  
       2021-10-18 17:48:08 +08:00
    有过同样的需求,用了分支。

    分支一旦分出去,几乎就不再动了,也没法动,常常忘了不同版本有什么区别,维护起来成本极高。最后不同的分支渐行渐远。。。
    zhaohui318
        14
    zhaohui318  
       2021-10-18 18:00:26 +08:00   ❤️ 2
    定制化太大, 直接复制 repo
    abigeater
        15
    abigeater  
       2021-10-18 18:08:58 +08:00
    之前的项目就是使用变量(进入前就开始这样做了) 看代码的时候会觉得判断恶心人。
    如果是把代码部署到别人服务器上用分支以 base 版本做开发会更好吧
    SoloCompany
        16
    SoloCompany  
       2021-10-18 18:20:20 +08:00   ❤️ 2
    分支永远都是最差的方案

    正常的行为是让主模块能够共用, 可以适当的把某些公共的抽象定义成变量

    而差异化代码可以独立分支或 repo, 通过导入依赖的方式来引入主模块

    分支只适合用来临时解决问题而不是让你永久去维护
    Otho
        17
    Otho  
       2021-10-18 19:06:01 +08:00
    别分支! 花了 2 年时间改造项目都给统一到一起。分支是看着挺干净,维护起来人人都想骂娘。
    bug 与 需求齐飞 可太爽了。
    #16 楼 说的极是
    EridanusSora
        18
    EridanusSora  
       2021-10-18 20:25:36 +08:00
    都不是好做法啊 清真做法应该配置化吧
    henryhu
        19
    henryhu  
       2021-10-18 21:58:35 +08:00
    我就感觉分支很难维护,还以为我使用分支的姿势不对,原来都是一样
    forgottencoast
        20
    forgottencoast  
       2021-10-18 21:58:55 +08:00
    两个方法都不是正道,正道是通过插件化来处理,然后放不同的仓库。
    elfsundae
        21
    elfsundae  
       2021-10-19 02:22:39 +08:00 via iPhone
    建议只维护一个分支,用变量,变量放配置文件,可根据不同客户创建不同的配置文件
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2750 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 02:22 · PVG 10:22 · LAX 19:22 · JFK 22:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.