Git 分支管理

124 阅读4分钟

前言

多人协作,项目复杂到一定程度,简单的 dev、test 两种分支,无法满足开发需要。而且从项目角度来说,项目始终从0到1,从简单走向复杂。如果一开始,不去做规范,等后面复杂到一定程度,更加难以开发和纠正。

就目前H5以及小程序都是这种分支管理,会出现测试环境(dev)没有问题,上生产(test)时发现问题。尽管及时处理,但这也如同定时炸弹一样,不知道什么时候就爆了。

既然目前的分支管理存在这样大的隐患,那么大厂是如何管理自己的分支呢?如何保证自己的代码正常、完整的上线呢?

image.png

分支说明

  1. Master 分支:即保存已发布到线上的代码。这个分支只能从其他分支合并,不能直接在这个分支修改代码。
  2. Develop 分支:主开发分支。基于 Master 分支创建。用于开发和第一阶段测试(即初次提测)。包含所有下一个准备发生产的代码。
  3. Release 分支:即将上线分支。基于 Develop 分支创建。在 Develop 分支提测后,Bug 改的差不多了,版本趋于稳定后,基于当前 Develop 分支创建一个 Release 分支,完成所有的验收后,即可上线该分支。 上线完后,需要将该 Release 分支合并到 Master 和 Develop 。在合并到 Master 分支时,需要打一个 Tag 。
  4. Feature 分支:开发分支。基于 Develop 分支创建。用于多人开发同一个迭代,分别开发不同功能。开发完成后,合入 Develop 分支进入下一个 Release 分支。在多人协作开发时,应该及时更新拉取最新的 Develop 代码。
  5. Hotfixes 分支:当我们发现线上 Bug,需要紧急修复时。这是,我们就可以基于 Master 创建一个 Hotfix 分支。在这个 Hotfix 分支修复完 bug 后,直接发布这个 Hotfix 到线上即可。 发布完成后,还应该将这个 Hotfix 分支的代码合回 Master 和 Develop 分支。这样这个 Hotfix 分支的改动就会进入下一个 Release。

Git Flow 各分支操作原理示意

  1. Master/Develop 分支:所有在 Master 分支上的合并操作都应该打上 Tag 。Develop 基于 Master 分支创建。 image.png

  2. Release 分支:Release 分支基于 Develop 分支创建。我们可以在这个 Release 分支上测试,修改 Bug 等。一旦创建完 Release 分支之后,不要从 Develop 分支合并新的改动到 Release 分支。 需要修改应该直接在这条 Release 分支做操作。 所以创建 Release 分支的时机不宜过早,应该等版本趋于稳定后创建。 发布 Release 分支时,合并 Release 分支到 Master 和 Develop,同时在Master分支打上 Tag 记住版本号,然后就可以删除这个分支了。打 Tag 可以标记每个版本,后续想用哪个版本都能快速提取。 image.png

  3. Feature 分支:开发分支,功能开发完成后合入 Develop 分支提测。合并完分支后一般会删点这个 Feature 分支。 image.png

  4. Hotfix 分支:紧急修复线上 Bug。基于  Master 创建。修复完成后上线该 Hotfix 分支。并合回 Master 和 Develop 分支。同时在 Master 上打一个 Tag。

image.png

规范本土化

以上是别人公司的 Git 分支管理流程,这个流程对于我们来说有一个最大的问题。

Develop 分支别人只用于合入最新一个需要上线的代码,并且只有一条。Feature 分支才是用来真正作为开发用的分支。当迭代只有一个,没有问题。

但我们经常是几个迭代一起开发、提测同一个项目。而上线时间却略有不同。这就导致如果按上面的来做分支管理,几个迭代的功能开发完成后, 不同迭代的 Feature 分支合入同一个 Develop 。

这样就完全区分不了不同的迭代了,也无法分开上线了。

所以我们可以这样调整:每个迭代都拉一个属于自己的 Develop。这样就不存在相互混入,相互依赖、影响的问题了。

总结

目前我们分支管理最大的问题在于,无法保证上线的代码一定跟测试时的代码一样。合代码其实是一个风险很高的操作,虽然会有test回归测试,但也无法保证不出问题。

使用上述的分支管理,则规避了这一问题,测试代码即上线代码。大大降低的了合代码产生的问题没有发现而流入线上。将合代码这个风险操作放在了下一个迭代的开始。

无论是 Master 分支还是 Develop 分支还是上述的其他几个分支,其本质都是普通分支。我们为了方便管理,才人为规定出这几种分支。

Git 分支管理规范是规范,大家认真执行之后才有意义。

当然,再好的分支管理,也架不住代码写的。你懂的~~