2024-03-17  2024-03-17    1228 字  3 分钟

问题背景

shanghai-***-business-***-webapp(上海*****业务)的***-business-***java模块)主要用到的分支有:

  • 2.x(主分支),生产环境分支

  • test(测试分支),测试环境分支

    web项目主分支依赖java的2.x分支的代码。测试分支依赖java测试分支

    近期测试环境正在进行底层脱敏新功能的测试,现在有一张表的敏感字段没有进行脱敏设置,需要开发进行敏感字段的脱敏。而进行脱敏问题的处理需要在专门分支进行开发,也就是在feat-mask-field(mask分支)上。

    对于我的理解,既然在mask分支上进行开发,那么最后当然要MR到测试分支,但是在我MR的时候发现最关键的一点,底层的版本号不一样,也就是测试分支和主分支的版本不一样。

    后面了解到,mask分支是从主分支上单独拉出来的分支,而不是测试分支拉出的分支。

发现问题

  1. 为什么要从主分支上拉出一个分支,但是作用是为测试分支服务?
  2. 那么这样只能在测试分支进行开发,然后测好再将功能点cherry到mask分支(这个动作类似于dev合并master),再将mask分支合并到测试分支(保证生产和测试分支平行),完成测试环境的脱敏开发任务。
    • 那么为什么要这样设计,本来在测试分支已经开发好了,为什么还要再把分支点加到mask分支,然后再合并到测试分支这样多此一举呢?
    • mask分支尽然是从主分支开的,那么合并测试分支是否会出现冲突问题?

理解问题

第一个问题:

对于主要的分支,尽量不要直接提交,应该进行MR合并到主分支的操作,对于小型的只有一个贡献者的项目,直接push到master上是有很大概率可以保证master的稳定性的。当项目不再是小型的。当项目不再是单人的。[https://liwt31.github.io/2019/09/01/nopush/]具体解释在链接中。

为测试分支服务,是保证测试环境的功能要向生产环境看齐,对应上。

第二个问题:

  1. 先解释mask分支是从主分支分出,合并测试分支问题。在第一次mask分支MR测试分支时,肯定是需要解决冲突的,在处理过冲突后,后续提交则只检测提交代码的合并冲突状态,而不需要关心类似上文中提出的版本号问题。

  2. 在测试分支开发的功能对应到主分支,做到测试环境和生产环境功能平行。并且能够做到及时的处理测试分支和主分支的冲突问题,提前解决冲突问题。

  3. 那么为什么需要绕一下呢,因为主分支的版本号和测试分支的版本号不一样,底层的代码会影响到web项目的调用。(web项目测试分支引用的是测试分支test的代码)。那么在本地进行项目启动的时候,如果想要模仿测试环境,则需要将java项目分支切到测试分支,保证依赖正确。

总结

  1. 合并分支要做到从主分支向其他分支合并,而不是反过来。主次需理解清楚。
  2. mask分支作为一个连接生产环境和测试环境的桥梁存在,既保证测试环境要有生产环境的功能点,又保证测试环境开发的新功能点无问题,即对主分支无冲突。