关注+星标公众号,不错过精彩内容
作者 | 量子君
微信公众号 | 极客工作室
前言
在前一篇文章中,我们了解了 Git 作为软件开发黄金标配的原因。今天,我们将深入了解一下 Git 的分支管理,尤其是一种备受推崇的管理方式——Git Flow。
为何选择Git?
分布式特性
Git是一种分布式版本控制系统,每个开发者都有一个完整的本地仓库。这使得即使在没有网络连接的情况下,开发者也能够独立工作,不受限制。
强大的分支管理
Git的分支管理是其最大的亮点之一。开发者可以轻松创建、合并、删除分支,使得并行开发变得十分简单。
版本回滚和恢复
Git允许你轻松地回滚到之前的任何一个提交,甚至可以创建一个新的分支来实验性地进行修改,而不影响主分支。
高效的合并机制
Git的合并机制非常智能,能够自动解决大部分合并冲突,减轻了开发者的工作负担。
轻量级和高速
Git的设计注重性能,使得大型项目也能够在相对较短的时间内进行版本控制操作。
基本概念
在介绍Git之前,让我们回顾一下版本管理的基本概念。Git是一种分布式版本控制系统,它通过记录文件的变更历史,帮助团队协同工作,追踪项目的演变。以下是Git的基本概念:
仓库(Repository):存放项目所有文件及变更历史的地方。
提交(Commit):保存项目在某一时刻的状态,每次提交都有一个唯一的标识。
分支(Branch):是项目的一个独立线路,可以用于独立开发某个功能,然后合并回主线。
远程仓库(Remote):位于网络服务器上的Git仓库,用于团队协作。
推送(Push)和拉取(Pull):将本地的提交推送到远程仓库,或者将远程仓库的变更拉取到本地。
工作区域
在 Git 中的文件有三种状态:
已提交:表示数据已经安全的保存在本地数据库中;
已修改:表示修改了文件,但还没保存到数据库中;
已暂存:表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
因此也引入了Git项目的三个工作区域的概念:
工作区:就是项目文件所在的目录,目前可以看到的文件信息
暂存区:stage 或 index。一般存放在 .git/index 文件中,所以我们把暂存区有时也叫作索引
版本库:工作区下隐藏目录 .git,这里记录着仓库的版本信息和历史记录
基本使用
大致的使用流程:
克隆仓库:使用git clone命令可以将远程仓库复制到本地,形成一个完整的本地仓库。
创建分支:使用git branch命令可以创建一个新的分支,开发者可以在不影响主干的情况下进行工作。
提交变更:使用git add和git commit命令可以将修改保存到本地仓库。
推送与拉取:使用git push命令可以将本地的修改推送到远程仓库,而使用git pull命令可以将远程仓库的变化拉取到本地。
合并分支:使用git merge命令可以将一个分支的变化合并到另一个分支,保持代码的一致性。
看提交效果,可以清楚地知道每次提交都改动了什么东西
实际应用
团队协作:Git使得多人协作变得更加流畅,每个成员都能够独立工作并将工作整合到项目中。
版本发布:通过创建标签(tag),可以轻松管理项目的版本发布,确保发布的版本是经过测试和稳定的。
持续集成(CI):Git与持续集成工具结合使用,可以自动触发构建和测试,加速开发周期。
开源社区:Git是许多开源项目的首选版本管理工具,如GitHub、GitLab和Gitee等平台提供了强大的协作和贡献机制。
什么是Git Flow?
Git Flow 是一种基于 Git 的分支管理模型,旨在帮助开发者更加优雅地处理复杂的项目开发过程。这一模型由 Vincent Driessen 提出,它定义了一组独立的分支,每个分支都有特定的用途,以确保团队协作的高效性。
优势在于:
清晰的分支结构:Git Flow 提供了清晰的分支结构,使开发者能够明确地知道当前项目的状态和下一步的操作。
有序的版本管理:通过定义版本、功能和热修复分支,Git Flow 确保了版本的有序发布和问题的及时修复。
团队协作:每个开发者都能在独立的分支上工作,通过 Pull Request 或 Merge Request 方便地进行代码审查,提高团队协作效率。
分支介绍
主分支(
master
):核心分支,不可删除命名固定master,主分支是项目的稳定版本,只包含随时可以发布的代码。所有的开发都应该在其他分支进行,不直接在主分支上操作。
开发分支(
develop
):核心分支,不可删除命名固定develop,所有日常开发工作都在开发分支上进行。这是一个集成了各种功能和修复的分支,当准备好发布新版本时,将合并到主分支。因此该分支的功能相对于
master
分支是比较全的,但是缺乏一定稳定性。功能分支(
feature
):临时分支,可删除。用于开发新功能的分支。从开发分支创建,完成后合并回开发分支。
对于该分支,命名规范是:feature/< name >,比如 feature/add_check发布分支(
release
):临时分支,可删除。当开发阶段完成,从开发分支创建发布分支,进行预发布的准备工作,如版本号升级和文档更新。完成后合并到主分支,并可能合并回开发分支。
对于该分支,命名规范是:release/< name >,通常结合语义化版本命名规范(语义化版本格式为: 主版本号.次版本号.修订号),比如 release/v1.0.0热修复分支(
hotfix
):临时分支,可删除。用于紧急修复主分支上的问题。从主分支创建,完成后合并回主分支,并可能合并回开发分支。
对于该分支,命名规范是:hotfix/< name >,通常也是结合语义化版本命名规范,主要是更改修订号,比如在 v1.0.0 版本(主分支上的该版本标签)的基础上创建分支,命名 hotfix/v1.0.1
工作流程图
借用网上一张经典的分支工作流程图:
软件推荐
如果刚使用git的朋友,对git分支创建命令行和分支管理等使用方式还不娴熟的情况下,可以利用软件体验一把,该软件名是”SourceTree“
总结
上述的分支管理是一个比较经典的,但是每个公司的项目管理方式不同和敏捷开发等原因,因此该分支管理模型不一定适用,但是主分支和开发分支是常用的。
主分支命名是master,开发分支命名develop。
不过在2020年,github宣称将master默认分支名改为main,大概主要是因为master and slave术语不够政治正确,跟种族歧视有关系。
团队协作时功能分支也是会经常使用,在开发新功能过程中为了避免影响开发分支,通常在开发分支创建功能分支进行开发,开发完成即可合并到开发分支上。
分支命名虽然比较随意,但是建议还是按照 feature/< name > 规范命名,比较清晰。