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

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

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

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

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

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

    所以想问问 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   ·   我们的愿景   ·   实用小工具   ·   2412 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:59 · PVG 23:59 · LAX 08:59 · JFK 11:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.