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

2022-08-29 08:27:53 +08:00
 Kei001

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

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

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

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

2414 次点击
所在节点    问与答
9 条回复
340244120w
2022-08-29 08:44:26 +08:00
分支合并冲突这个也不是问题啊。都定制开发了,方法一也有冲突,而且比单纯合并冲突还复杂吧。


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

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

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

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

如果有无法兼容的大更新可增加通用包版本,定制版本选择合适的版本进行定制。
Kei001
2022-08-29 12:13:13 +08:00
@Felldeadbird @ZxBing0066 主要是前端页面需要定制,比方说部分页面的布局样式要调整,功能增减这样,并非是后端 API 差异,这个如何插件化?
civetcat
2022-08-29 12:47:11 +08:00
我们也碰到这个问题、现在是多每个定制版本开一个分支。然后同步用 cherry-pick. 如果定制分支多了,也是相当不可控,经常忘记同步,代码冲突等问题。我还想着用环境变量的方式,切换不同的路由会不会好一点,但是前提需要 import 所有的文件了。或者编译层面的环境变量,通过 webpack alias 就能在不同情况下 import 到对应的路由文件。
xujinkai
2022-08-29 13:01:47 +08:00
等高手。
我们目前是分支的方式,但更新的时候就很难受。
如果是环境变量的方式,不是所有代码都能插件化的,你永远猜不到下一个客户想定制什么东西,最终代码会各种条件判断。
也许没法两全其美,必须做取舍。
ZxBing0066
2022-08-29 13:53:56 +08:00
@Kei001 模块分层,通用模块毫无定制性; UI 模块,提供部分定制选项;最外层按需套皮咯。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/876071

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX