MXXXXXS
V2EX  ›  问与答

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

  •  
  •   MXXXXXS · Oct 18, 2021 · 3163 views
    This topic created in 1679 days ago, the information mentioned may be changed or developed.
    公司的一个项目,有一个通用版本,对于不同客户基于这个通用版本要改一些东西

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

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

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

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

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

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

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

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

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

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

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

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

    分支只适合用来临时解决问题而不是让你永久去维护
    Otho
        17
    Otho  
       Oct 18, 2021
    别分支! 花了 2 年时间改造项目都给统一到一起。分支是看着挺干净,维护起来人人都想骂娘。
    bug 与 需求齐飞 可太爽了。
    #16 楼 说的极是
    EridanusSora
        18
    EridanusSora  
       Oct 18, 2021
    都不是好做法啊 清真做法应该配置化吧
    henryhu
        19
    henryhu  
       Oct 18, 2021
    我就感觉分支很难维护,还以为我使用分支的姿势不对,原来都是一样
    forgottencoast
        20
    forgottencoast  
       Oct 18, 2021
    两个方法都不是正道,正道是通过插件化来处理,然后放不同的仓库。
    elfsundae
        21
    elfsundae  
       Oct 19, 2021 via iPhone
    建议只维护一个分支,用变量,变量放配置文件,可根据不同客户创建不同的配置文件
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3119 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 90ms · UTC 13:56 · PVG 21:56 · LAX 06:56 · JFK 09:56
    ♥ Do have faith in what you're doing.