不同的项目版本用 git 分支还是变量判断来管理? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MXXXXXS
V2EX    问与答

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

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

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

    我的想法: 一个通用版本分支,其他版本各一个 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     Solana     1171 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 23:49 PVG 07:49 LAX 15:49 JFK 18:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86