大家是如何进行定制化版本控制的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Kei001
V2EX    问与答

大家是如何进行定制化版本控制的?

  •  1
     
  •   Kei001 2022-08-29 08:27:53 +08:00 3010 次点击
    这是一个创建于 1169 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人前端开发,目前公司项目是一套系统,每个客户都会在此基础上定制化开发,做一些样式和功能上的修改。

    目前针对客户的定制化需求,我们前端是采用环境变量+条件编译的方式来管理的,但由此也产生了弊端:客户多了以后,各类编译条件错综复杂,久而久之难以阅读,不利于代码的维护。

    也考虑过每个客户单独拉一个分支出来,在主分支上更新代码,每次更新都合并到其他定制化分支出来,这样也清晰明了,但这种方法容易产生代码冲突,每次合并的时候都需要花时间解决代码冲突。

    所以想问问 V 站的大家一般这种情况是如何进行版本控制的呢?

    9 条回复    2022-08-29 13:53:56 +08:00
    340244120w
        1
    340244120w  
       2022-08-29 08:44:26 +08:00 via iPhone
    分支合并冲突这个也不是问题啊。都定制开发了,方法一也有冲突,而且比单纯合并冲突还复杂吧。


    首先开分支这个是肯定了的。其次代码本身尽量为扩展留点插口啥的,尽量把定制化需求的代码隔离出来。
    Dkngit
        2
    Dkngit  
       2022-08-29 09:16:14 +08:00
    分支发现不怎么好管理,有点想要每个甲方 fork 一个仓库出来。
    abvatous
        3
    abvatous  
       2022-08-29 10:57:24 +08:00
    插个眼
    定制开发的,发现很多代码都需要分开隔离 /要么就是每个客户就是一次 checkout branch
    求个优雅的管理定制化代码版本管理方法
    Felldeadbird
        4
    Felldeadbird  
       2022-08-29 11:53:06 +08:00
    1. 分支、分版本仓库进行管理。 手动同步版本。

    2. 把定制功能插件化。其余一律和主版本一致。

    你们已经定制开发了,就不要追求每个客户源码都和最新版一致了。
    ZxBing0066
        5
    ZxBing0066  
       2022-08-29 11:56:24 +08:00   1
    核心功能做成通用包,定制化功能做成外层,调用通用包。

    通用包通过 API 兼容保证升级不会出现问题,各定制化间没必要耦合。

    如果有无法兼容的大更新可增加通用包版本,定制版本选择合适的版本进行定制。
    Kei001
        6
    Kei001  
    OP
       2022-08-29 12:13:13 +08:00
    @Felldeadbird @ZxBing0066 主要是前端页面需要定制,比方说部分页面的布局样式要调整,功能增减这样,并非是后端 API 差异,这个如何插件化?
    civetcat
        7
    civetcat  
       2022-08-29 12:47:11 +08:00
    我们也碰到这个问题、现在是多每个定制版本开一个分支。然后同步用 cherry-pick. 如果定制分支多了,也是相当不可控,经常忘记同步,代码冲突等问题。我还想着用环境变量的方式,切换不同的路由会不会好一点,但是前提需要 import 所有的文件了。或者编译层面的环境变量,通过 webpack alias 就能在不同情况下 import 到对应的路由文件。
    xujinkai
        8
    xujinkai  
       2022-08-29 13:01:47 +08:00
    等高手。
    我们目前是分支的方式,但更新的时候就很难受。
    如果是环境变量的方式,不是所有代码都能插件化的,你永远猜不到下一个客户想定制什么东西,最终代码会各种条件判断。
    也许没法两全其美,必须做取舍。
    ZxBing0066
        9
    ZxBing0066  
       2022-08-29 13:53:56 +08:00
    @Kei001 模块分层,通用模块毫无定制性; UI 模块,提供部分定制选项;最外层按需套皮咯。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1290 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 17:07 PVG 01:07 LAX 09:07 JFK 12:07
    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