git 管理代码

1,150 阅读4分钟

1. 为什么讲 git 代码管理?

看到网上教程,大部分是从细节上讲 git 操作,而不是从宏观层面上认识 git 是如何代码管理。

2. git 代码管理4条准则或4个问题

  1. 明确分支种类、数目、角色。
  2. 明确代码发布流程(具体到发布分支是什么、发布前如何合并代码)。
  3. 明确测试阶段 bug 修复流程(具体到 qa 和开发之间代码分支隔离)。
  4. 明确生产 bug 修复流程。

Git代码管理好不好,就看四个问题解决了没!!!

3. git 分支模型

  1. github flow
  2. git flow
  3. gitlab flow
  4. 其他分支模型——chunk-base-model

前 3 种是主流,后面一种是非主流分支模型。

3.1 github flow 分支模型

特点:简单,新的 featrue/hofix/update 只能串行执行。 应用场景:只能适用于小规模的开发,如:js库。

3.2 git flow 分支模型

特点:复杂,新功能可以并行开发。 应用场景:适用于较大web系统应用的开发,如:某个后管系统。 通俗来讲:开发的应用功能迭代快,团队人多且每个人技术背景差异大,特别适合这种分支模型。

git flow 分支角色说明

master 用于存储发布后的代码。 develop 用于保证开发时,代码是最新。 release 用于测试和开发之间的代码缓冲和发布。 feature 用于开发新的功能和测试阶段bug修复。 hotfix 用于修复生产bug。 另外,分支的角色,也不是一层不变,有时更具情况做响应的调整的。

git flow 分支模型的 develop 问题

develop 分支是保证代码最新,往往有这么一个情况,feature 分支 merge 到 develop , 该 feature 上功能突然不上, develop 就超出当前需求开发的“最新”。解决方案有3种:

  • 利用代码回滚或cherry-pick等去回到当前迭代“最新”的代码,需要开发(我好难啊o_0 )知晓别开发者的 commit 对应的代码。
  • 投入更多人力管理 develop 分支,让分支管理者(我好难啊o_0)知晓合到 develop 的每个 feature 迭代情况,超出的禁止合到 develop 上。
  • 用 realese/feature/hotfix 代替 develop,保证迭代初代码是最新的。(大家都舒服^_^)

git flow 分支模型的hotfix问题

问题:假设出现一个hotfix 的 bug,由于需求迭代或项目重构,这个 hotfix 的 bug 可能不需fix?不然发现,一个代码管理问题就变成项目管理问题。 解决方案:

  • 如果是紧急发布,那么修改之后,通过测试,将 hotfix 分支合到主干分支后,要通知在该仓库下正在开发需求的开发人员,拉最新的代码。
  • 常规需求发布,在合并到release分支上,需要注意冲突。 补充:hotfix 分支 merge 到 develop 分支不优雅,尤其项目重构时,merge 会出现很多问,这情况用 cherry-pick 就好很多。

cherry pick 是什么?

屏幕快照 2020-03-09 下午10.32.35

3、gitlab flow 流程

团队内,增加 1 个开发代码和测试代码的缓冲。

团队内 + 团队外,增加两个开发代码和测试代码的缓冲。

特点:中庸,比 github flow 复杂,比 gitflow 简单。 应用场景:适用于较大web等系统应用的开发,人员简单,或者,人多但人员技术级别都很高。

4、其他分支模型——chunk-base-model

这种分支模型,适用于开发基础建设好,团对人员都强的人,我们就看看就好!

总结

1、所有分支模型都一个主干分支,然后有一个分支,用于测试和开发之间代码缓冲。

2、所有分支的命名、commit 信息需要一个规范,这样才能保证有效管理分支。例如:分支的命名 feature/1.0.0_20200124_feat1,release/1.0.0_20200124等。

3、最主流的分支模型是 gitflow 分支模型,但是,没有哪个分支模型是最好,只有最适合自己团队的分支模型。

参考地址