Git分支管理策略

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/voidreturn/article/details/78690993 git branch的管理策略网上有不上文章,流传比较广泛的应该是阮一峰的Git分支管理策略,不过个人感觉这个策略过于简单,在实际的开发环节中,有很多情况不好处理。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/voidreturn/article/details/78690993

git branch的管理策略网上有不上文章,流传比较广泛的应该是阮一峰的Git分支管理策略,不过个人感觉这个策略过于简单,在实际的开发环节中,有很多情况不好处理。另一篇比较有名的文章则是:a-successful-git-branching-model 该文对于各分支的merge操作过于随意,会导致branch线十分繁琐,又过于复杂。这里总结一些个人在使用git管理代码仓库过程中的一点想法和思考,以及在实际开发过程采用的方法。

分支分类简介:

基于常见软件开发中场景,将所有分支归纳为三类:

  • 正式发布分支:
    • release branch
    • release_hotfix_xxxx branch
  • 开发分支:
    • develop (主) branch
    • develop_xxxx (feature) branch
  • 内测发布分支:
    • prepare branch (主) branch

开发阶段简介:

  1. 开发阶段:develop branch & develop_xxxx branch进行。
  2. 预发阶段:持续的merge develop to prepare branch,进行内测。
  3. 线上发布阶段:内测稳定“无问题”后,进入线上发布阶段,由发布owner merge prepare branch to release branch。注:线上发布阶段,prepare branch锁定不再更新。

正式发布分支:

release branch

release branch为正式发布分支,该branch HEAD保持同当前正式发布最新版本一致,每一个正式发布的版本都在release branch有唯一对应的tag。

  1. 在进入线上发布之前不允许直接push修改到release branch,进入线上发布之后仅允许从develop分支上cherry-pick commit。
  2. merge, cherry-pick操作只由本次发布owner操作,发布成功打tag。
  3. 进入线上发布的release branch如果测试出现重大bug,建议重新进入预发阶段,如果出现等级较低的bug,尽量在develop修复,通过cherry-pick将该笔修复合入release branch。(如果develop上无法复现,必须在release分支上修复的,允许在release branch修复,修复后,将该修改cherry-pick回develop branch)
  4. 线上发布阶段仅修bug,不加功能,如果需要加功能,重新进入开发阶段,或者预发阶段,本次线上发布操作中止。

release_hotfix_(version)_(xxxx) branch

hotfix branch为应对突发情况的发版,基于相应正式release branch基础,checkout一个hotfix branch进行相应修复后,基于该branch进行突发情况的紧急发布。

  1. 该分支只能基于release branch checkout,命名采用release_hotfix_vX.X.X(_feature)
  2. hotfix branch上新增的修复commit需同步cherry-pick到develop branch。
  3. hotfix branch不允许merge回release branch(参见release branch条目1)

思考:为什么hotfix branch不好merge会release branch?

内测发布分支:

内测发布分支作为内部提测使用的分支,隔离开发和内测发布分支,目的:不影响内部提测和开发人员的持续提交。

prepare branch

  1. prepare对应develop的内测分支。
  2. 任何情况下不允许直接push修改到prepare branch。
  3. prepare branch的更新只能通过develop branch merge更新。
  4. 内测发布分支的merge由内测发布owner操作。

思考:内测发布分支是否必要?

开发分支:

develop branch

develop branch为开发过程中的主干分支,是开发人员操作最多的分支。

  1. 小功能,小bug,独立模块的提交可以直接提交到develop branch。每笔的提交必须保证可build,可执行。同时需尽量保持模块功能独立,完整,版本单一,不破坏app功能的完整统一,无大问题。
  2. develop分支上提交的功能commit必须是本开发版需要发布的功能,后续版本的功能开发需求,采用单独拉出develop_feature branch进行开发。
  3. 提交冲突,需采用rebase合并,不允许采用merge(git pull默认方式)。

rebase和merge的区别:

develop_xxxx branch

大feature的模块开发,会破坏develop分支功能完整性,非本期开发需求的开发工作,需拉出单独的develop branch进行。

  1. branch命名采用develop_xxxx方式,xxxx代表开发feature。
  2. develop_xxxx branch只能基于develop branch checkout。
  3. develop_xxxx branch开发完成后通过git merge –no-ff(非fast-forward)合并回develop branch。
  4. develop_xxxx branch原则上不允许反向merge develop branch(develop to develop_xxxx)。

–no-ff和fast-forward的区别:

这里写图片描述
图片来自网络。

为什么不允许反向merge develop branch?

清晰,美观,好追溯

Git commits历史是如何做到如此清爽的?

feature branch一定要merge develop分支才能内测吗?

  1. feature branch的测试关注于单一模块功能。
  2. 只有当发现重大bug在develop分支修复,同时该bug影响到了feature分支的测试,可考虑合并develop分支。
  3. 当develop分支有基础库的大修改,而当前feature分支严重依赖该库,如果不进行合并,后续仍然有很多代码需要兼容该基础库,导致后续大部分代码的编写无生产意义时,可考虑合并develop分支。

如果develop_feature branch一定要merge develop分支才能测试,怎么办?

  1. 如果该feature由一个人单独开发,建议采用git rebase方式合并。(单独开发的功能合并分支尽量采用rebase,为保证减少合并冲突的难度,建议在开发过程中,以天为单位持续rebase develop branch)
  2. 如果该feature由多人开发,只能采用git merge进行合并。(尽量在一次merge完成,不要持续多次merge develop branch)
目录
相关文章
|
30天前
|
运维 测试技术 持续交付
代码管理的艺术:你的团队是否还在为 Git 分支管理头疼?
本文回顾了作者从2~3人初创团队到百人技术团队的经历,分享了代码管理工具从无到SVN再到Git的演变。重点介绍了Git Flow和GitHub Flow两种常用的Git分支管理模型,分析了它们的适用场景和优缺点。Git Flow适合中大型项目,而GitHub Flow则更适合小型团队和Web应用开发。
70 0
|
2月前
|
开发工具 git
git分支管理master/hotfix/develop/feature/release
采用合理的Git分支管理模型可以显著提升团队协作效率和代码管理的质量。本文介绍的 `master`、`develop`、`feature`、`release`和 `hotfix`分支模型是一个行之有效的方法,适用于大多数软件开发项目。通过清晰地划分各个分支的职责,团队成员可以更专注于各自的开发任务,同时确保代码库的稳定性和可维护性。
91 2
|
3月前
|
开发工具 git
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
159 1
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
|
3月前
|
开发工具 git 开发者
关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
本文通过具体操作和截图,详细讲解了如何在Git中解决分支冲突问题,包括如何识别冲突、手动解决冲突代码、提交合并后的代码,以及推送到远程分支。
720 3
关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
|
2月前
|
测试技术 开发工具 git
掌握Git分支管理,提升团队协作效率
掌握Git分支管理,提升团队协作效率
48 0
|
4月前
|
缓存 开发工具 git
Git创建分支以及合并分支
在Git中,创建分支使用`git branch [branch_name]`,切换分支使用`git checkout [branch_name]`。修改文件后,通过`git add [file]`添加到暂存区,然后`git commit`提交到本地仓库。如果是新建分支的第一次推送,使用`git push origin [branch_name]`推送到远程仓库,之后可以简化为`git push`。合并分支时,使用`git merge [branch_name]`将指定分支的更改合并到当前分支。
120 2
Git创建分支以及合并分支
|
3月前
|
开发工具 git
Git分支使用总结
Git分支使用总结
60 1
|
4月前
|
测试技术 开发工具 git
掌握 Git 分支策略:提升你的版本控制技能
在现代软件开发中,版本控制至关重要,Git 作为最流行的分布式版本控制系统,其分支管理策略对于高效协作和代码维护尤为重要。本文介绍了几种常用的 Git 分支策略,包括主线开发模型、功能分支模型、Gitflow 工作流和 Forking 工作流,并探讨了如何根据项目需求选择合适的分支模型。通过保持 `master` 分支稳定、及时合并清理分支、使用命名规范、利用 Pull Request 进行代码审查及自动化测试等最佳实践,可以显著提升团队协作效率和软件质量。掌握这些策略将帮助开发者更好地管理代码库,加快开发流程。
|
4月前
|
存储 Linux 开发工具
Git基础命令,分支,标签的使用【快速入门Git】
本文详细介绍了Git版本控制系统的基础概念和常用命令,包括工作区、暂存区和版本库的区别,文件状态的变化,以及如何进行文件的添加、提交、查看状态、重命名、删除、查看提交历史、远程仓库操作和分支管理,还涉及了Git标签的创建和删除,旨在帮助读者快速入门Git。
Git基础命令,分支,标签的使用【快速入门Git】
|
3月前
|
开发工具 git
【Git快速入门】Git代码管理手册与协同开发之分支管理与协作(五)
【Git快速入门】Git代码管理手册与协同开发之分支管理与协作(五)