前言,这个想法应该是git比较通用的做法,只是我还没用过,所以把自己的想法记录在这里,督促自己以后按这个方式执行。

我们公司现在面临一个问题, 就是客户的定制需求很多,很杂,其中坑爹需求很多。

我还没真正面对过这些问题, 不过以在上一家公司的经验,有一些坑爹的需求,往往先加进来,用一段事件后,又会被还原成原本的样子。

对于这种问题,以前是没有很好的解决方案的,因为这种坑爹需求从加入到还原,中间还插入过很多其他的功能点修改。

很难一步还原。

而我想到的方法是这样的, 其实应该也是git建议的用法,

即每次有新的功能点需求, 都为这个功能点创建一个分支,如fp1(function point1)分支,在该分支下做专属于这个功能点的改动。

如果其中需要改动到公用或全局的东西,理想情况下就先切换回主分支(一般是master)上,重构代码后,再到fp1下完成专属于功能点的改动。

在完成fp1后,再将其合并到master上,注意要写好提交的comment。

这样,在经过若干个功能点的提交之后。如果发现某个功能点需要被删除,或者要求被还原,这是,只要找到这个功能分支的合并提交点,将该次合并的修改还原即可。

这个方案还有2个明显的问题没有考虑清楚:

1.每个功能点分支在合并到主分支之后,是否要删除?

2.如果删除了,而这个功能点需要再次扩展或维护时,怎么办?

3.如果不删除,在经过较长时间后,再修改该功能,是否将主分支合并到该功能分支上,再进行修改? 如果是这样的话,会不会有什么问题?

对于上述3个问题,期待有经验的同学解答。 我暂时采取的解决方案是:

分支在合并后,短期内不删除(如一周或一个月,视项目组开发情况而定),在短期内不再出现改动后,删除分支。 但是在提交时注明功能点分支名称和合并说明。当需要根据该功能点进行维护时,新建分支,如果原分支名为fp1,那么新分支取名要和原分支名能明显看出有关联,如fp1-1。

在分支fp1-1合并后, 如果发现fp1需要整个还原,则找出fp1和fp1-1的合并记录,依次还原2次合并。 如果只要还原fp1-1,则只还原fp1-1的合并即可。

个人的想法就到这里, 由于只是想法,还未经过实践, 而实践是检验真理的唯一标准,所以接下来的工作我会实际试试我的想法,看效果如何。

之后如果有什么体会,或发现文中有什么错误,也会更新到该博文中。

使用git的分支功能实现定制功能摘取与组合的想法的更多相关文章

  1. git学习笔记10-新开发的功能不想要了-强行删除分支

    添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支. 现在,你终于接 ...

  2. Git -- 新增分支添加新功能

    软件开发中,总有无穷无尽的新的功能要不断添加进来. 添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合 ...

  3. canvas菜鸟基于小程序实现图案在线定制功能

    前言 最近收到一个这样的需求,要求做一个基于 vue 和 element-ui 的通用后台框架页,具体要求如下: 要求通用性高,需要在后期四十多个子项目中使用,所以大部分地方都做成可配置的. 要求做成 ...

  4. antd在线换肤定制功能

    最近react项目,用的antd框架,然后看见他的antdPro例子里面有个定制功能很帅,老大说做,那就做吧,鼓捣了一晚终于实现了. 先看预览效果吧 css换肤 入行前端的时候经常看鱼哥(张鑫旭)的博 ...

  5. 微信小程序一键生成源码 在线制作定制功能强大的微信小程序

    微信小程序发展到现在,短短的一年不到的时间(很快就要迎来微信小程序周年庆),在快迎来周年庆之际,百牛信息技术bainiu.ltd特记录一下这个发展的历程,用于将来见证小程序发展的辉煌时刻,我们还能知道 ...

  6. git Bug分支

    Bug分支 软件开发中,bug就像家常便饭一样.有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除. 当你接 ...

  7. git Feature分支

    Feature分支 软件开发中,总有无穷无尽的新的功能要不断添加进来. 添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在 ...

  8. git 利用分支概念实现一个仓库管理两个项目

    需求描述:开发了一个网站,上线之际,突然另一个客户说也想要个一样的网站,但网站的logo和内部展示图片需要替换一下,也就是说大部分的后台业务逻辑代码都是一致的,以后升级时功能也要保持一致:刚开始想反正 ...

  9. 好代码是管出来的——Git的分支工作流与Pull Request

    上一篇文章介绍了常用的版本控制工具以及git的基本用法,从基本用法来看git与其它的版本控制工具好像区别不大,都是对代码新增.提交进行管理,可以查看提交历史.代码差异等功能.但实际上git有一个重量级 ...

随机推荐

  1. 关于mybatis 的mapper namespace 作用及解析

    因为语言惯性,大部分的namespace 在语言级别*来说是作为一种限定性标识来用,起到唯一或一类的标识.来看看语言(以PHP语言为例)上的namespace的作用实例 一.namespace 在PH ...

  2. springmvc restful配置有一个小小的坑坑

    首先web.xml配置 <!-- spring-mvc --> <servlet> <servlet-name>springServlet</servlet- ...

  3. Scalaz(0) - 写在前面

    面向对象编程范畴(OOP)从80年代C++到90年代java的兴起已经经历了几十年的高潮,是不是已经发展到了尽头,该是函数式编程(FP)开始兴旺发达的时候了吧.这样说似乎心眼儿有点坏,可能会得罪当今大 ...

  4. 为什么正常安装并成功运行了Genymotion虚拟但是运行的时候启动的却是自带的模拟器?

    最近因为这个问题困惑了好久,最终找到了解决思路: 点击genymotion——setting——ADB——Use sustom Android tools,找到电脑中SDK文件位置就可了! 希望自己坚 ...

  5. Java集合源码分析(五)HashSet<E>

    HashSet简介 HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持.它不保证set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用null元素. HashSet源 ...

  6. 缓存MEMCACHE 使用原子性操作add,实现并发锁

    memcache中Memcache::add()方法在缓存服务器之前不存在key时, 以key作为key存储一个变量var到缓存服务器.我们使用add来向服务器添加一个键值对应,如果成功则添加,否则说 ...

  7. linux使用rpm重装jdk

    1.卸载jdk #rpm -qa | grep gcj 如果输出没有内容,说明没有jdk,如果输出有内容,要把搜索到的文件卸载掉,命令为: #rpm -e --nodeps [上步操作输出的文件] 然 ...

  8. 开源日志记录工具log4j

    前言:当我们进行大的项目书写的时候或者我们选择维护程序的时候,想知道几点几时我们录入的数据有bug是那么我们就采用--------------------------->log4j记录日志的信息 ...

  9. 从基础学起----xuld版高手成长手记[1]

    别人的代码总是看不懂? 想实现一个功能总是无从下手? 学会一个,但稍微变个花样就不知道了? 无论你擅长什么编程语言,如果你觉得自己基础薄弱,想从头开始学起,那本文将适合你. 这篇文章的含金量非常高,如 ...

  10. JavaScript学习(2):对象、集合以及错误处理

    在这篇文章里,我们讨论一下JavaScript中的对象.数组以及错误处理. 1. 对象 对象是JavaScript中的一种基本类型,它内部包含一些属性,我们可以对这些属性进行增删操作. 1.1 属性 ...