如何维护标准版本以及N个拓展版本?
总结:
使用git来进行版本控制,里面有cherrypick的功能。还有项目开发做到组件化,把通用组件放到公司的maven仓库。
聊天记录:
广州 - D(1962264482) 16:46:28
【描述】 开发完成了一款应用,随着需求的改变,基于此版本会衍生出了多个版本。目前的做法是,每衍生出一个版本都会把标准版的代码下载到本地,然后基于标准版来完善代码,并重新再上传到SVN新建的目录。衍生的版本上传后没有了标准版的之前的日志。
【问题】这么多的版本应该怎么维护,怎么记录,怎么做同步修改,怎么合并?比如想把拓展版本修改的代码顺便完善到标准版,该怎么做?大家有什么好的建议和工具推荐吗?
亚纶(1106143842) 16:47:36
你听过组件化吗
广州 - D(1962264482) 16:48:15
听过,但对此概念不太清晰
Lebr(251600448) 16:48:40
用git
古月(1932302089) 16:50:44
你这个拓展版本跟标准版本相比,差异在哪里
广州 - D(1962264482) 16:51:43
拓展版本有3,4个,都是基于标准版拓展的。
广州 - D(1962264482) 16:53:44
标准版不是不变的。拓展版本修改的同时,标准版本可能有另外的开发人员去修改。
广州 - D(1962264482) 16:54:26
所以现在,如果每个版本要增加一个功能,标准版本和拓展版本都要跟着修改,工作量很大。
广州 - D(1962264482) 16:55:14
标准版和拓展版本是分开上传到SVN的,没有主干和分支的概念。
古月(1932302089) 16:56:06
productFlavors 不知道你有没有用过
广州 - D(1962264482) 16:56:24
这倒没有
小土豆(515353776) 16:56:52
同问,我们项目也有这种问题,想不到好的办法去解决
亚纶(1106143842) 16:56:53
就用组件化
亚纶(1106143842) 16:57:09
把不同的地方分割出来
亚纶(1106143842) 16:57:19
然后有一个总的流程使用
亚纶(1106143842) 16:57:21
就好了
亚纶(1106143842) 16:57:28
这就是我想的方案
Lebr(251600448) 16:58:48
版本之间的差异主要在什么地方
广州 - D(1962264482) 16:59:45
会拓展功能,或者修改基础版本和拓展版本@Lebr
小土豆(515353776) 17:00:17
我们的版本之间的差异可能是一些 网络请求地址改一下,logo改一下 ,然后就是增加一些特色功能 @广州 - D 目测我们遇到的问题差不多
广州 - D(1962264482) 17:00:20
比如说基础版本出问题了,那么基础版本和拓展版本都要修改。
古月(1932302089) 17:00:48
我们的应用也有很多定制版本,比如定制应用名、应用图标、或者页面有改动,就是使用的product Flavors
亚纶(1106143842) 17:00:53
小土豆你可以用一下Build里面的配置
亚纶(1106143842) 17:00:55
来做
小土豆(515353776) 17:01:55
有没有文档介绍什么的,我有点懵逼
古月(1932302089) 17:02:30
http://blog.csdn.net/crazyman2010/article/details/53471162
小土豆(515353776) 17:02:52
嗯,好的,我来看下哈
广州 - D(1962264482) 17:03:54
product Flavors是共用一份代码去拓展版本吗?@古月
Lebr(251600448) 17:04:04
我们现在的方案是这样子的,是将差异做在了一个配置文件中,有一份公版代码,关于功能拓展,可以将代码写在公版代码中,然后可以通过配置文件来确定是否执行。如果代码差异较大,可以通过在配置文件中重写差异较大的类,在编译之前进行替换。
亚纶(1106143842) 17:04:39
这就比较
亚纶(1106143842) 17:04:40
恶心了
亚纶(1106143842) 17:04:44
意味着
Lebr(251600448) 17:04:48
虽然冗余代码很多,但贵在可行
亚纶(1106143842) 17:04:51
你管理公版代码的人
古月(1932302089) 17:04:52
是滴@广州 - D
亚纶(1106143842) 17:05:00
必须知道所有的东西
小土豆(515353776) 17:06:19
@古月 product Flavors 这个能不同的版本打出来apk是不同的包名吗
古月(1932302089) 17:06:42
你可以配置包名的
Lebr(251600448) 17:06:44
阔以
广州 - D(1962264482) 17:06:47
@古月 product Flavors和@Lebr 说的原理应该差不多。但是这样会有一个问题,代码量会很大,不方便维护,下一个开发人员比较难接锅双击查看原图
Lebr(251600448) 17:07:21
nono
古月(1932302089) 17:08:03
所以拓展版本和标准版本差异太大的话就不好使
亚纶(1106143842) 17:09:08
所以说还是组件化靠谱
广州 - D(1962264482) 17:09:36
之前开发不是组件化的双击查看原图@亚纶
亚纶(1106143842) 17:09:59
那还是别动了
Lebr(251600448) 17:12:44
话说拓展版本为啥不从标准版拉分支呢
广州 - D(1962264482) 17:13:09
如果有一个版本控制工具可以做到这样的功能就好了
1.基于标准版本可以拓展多个版本
2.标准版本修改了,可以把修改的内容 选择 同步到指定的拓展版本
3.拓展版本新增的功能,可以选择性的同步到标准版本,同时标准版本可以仿照2步骤同步到指定的拓展版本。
4.每个版本都有记录,从标准版本开始。
广州 - D(1962264482) 17:13:41
没有拉分支,版本太多了,不只是有两个@Lebr
Lebr(251600448) 17:14:34
那这不就是git嘛。
广州 - D(1962264482) 17:15:36
git玩得不太溜双击查看原图
Lebr(251600448) 17:15:55
刚好有机会练练双击查看原图
亚纶(1106143842) 17:16:04
cherrypick
亚纶(1106143842) 17:16:14
这就需要你开发的时候
广州 - D(1962264482) 17:16:16
git能做到修改基础版本,“选择”同步到指定的拓展版本么@Lebr
亚纶(1106143842) 17:16:18
要验证一下
Lebr(251600448) 17:16:59
阔以啊 cherrypick把其他分支的提交合并到这个分支上
广州 - D(1962264482) 17:17:05
好,我了解下。
亚纶(1106143842) 17:17:11
这就需要你
亚纶(1106143842) 17:17:22
每个commit记录是否可以用替换
17:17:26
亚纶撤回了一条消息
亚纶(1106143842) 17:17:30
一个掌握
广州 - D(1962264482) 17:18:24
公司一直使用svn。使用git基本都是自己一个人开发,很少冲突,都是很基础的操作,没试过
cherrypick双击查看原图
亚纶(1106143842) 17:18:47
不过我还是建议组件化
广州 - D(1962264482) 17:19:47
组件化是指把每个功能抽成一个模块的意思么?@亚纶
亚纶(1106143842) 17:20:57
是的
广州 - D(1962264482) 17:20:58
双击查看原图
广州 - D(1962264482) 17:21:14
那你是怎么维护每个模块的
广州 - D(1962264482) 17:21:37
如果别的项目要用到了这个模块,怎么依赖?
广州 - D(1962264482) 17:21:56
是把模块放到仓库里面?
广州 - D(1962264482) 17:22:04
双击查看原图
广州 - D(1962264482) 17:23:24
如果直接从别的项目依赖模块,此模块出现问题了,那每个依赖该模块的项目都要修改双击查看原图
亚纶(1106143842) 17:24:47
不是
亚纶(1106143842) 17:25:07
主要是把业务分割开来
亚纶(1106143842) 17:26:10
要说模块出问题了
亚纶(1106143842) 17:26:17
那你网络出问题了
亚纶(1106143842) 17:26:18
咋办
广州 - D(1962264482) 17:27:32
双击查看原图
广州 - D(1962264482) 17:29:02
如果一款应用有语音识别模块,如何把这个模块做到组件化,可以从代码的角度说下么,不太清晰,谢谢双击查看原图@亚纶
亚纶(1106143842) 17:30:03
那你就把语音语音识别做成一个Module就好了
17:30:39
你撤回了一条消息
广州 - D(1962264482) 17:32:10
Module是放到哪里的,怎么做到修改Module,其它依赖改Module的项目自动修改?
广州 - D(1962264482) 17:32:14
双击查看原图
亚纶(1106143842) 17:32:50
这么说吧
亚纶(1106143842) 17:33:13
相当于你有一个多个Module的Project
广州 - D(1962264482) 17:35:03
其实我主要想问的是,怎么维护Module,通过什么方式双击查看原图
亚纶(1106143842) 17:37:06
路由
广州 - D(1962264482) 17:38:19
好像之前在群里看过"路由"这个词,没怎么注意双击查看原图
广州 - D(1962264482) 17:38:57
是要把Module放到公司的Maven仓库?
亚纶(1106143842) 17:41:05
是的
亚纶(1106143842) 17:41:10
我在路上
亚纶(1106143842) 17:41:21
你先看看组件化
亚纶(1106143842) 17:41:24
的概念
广州 - D(1962264482) 17:44:20
好,谢谢