Git如何实现高效而有序的分支管理

文摘   2024-10-25 11:42   山东  

关注+星标公众,不错过精彩内容


作者 | 量子君

微信公众号 | 极客工作室

前言

在前一篇文章中,我们了解了 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 > 规范命名,比较清晰。






若觉得文章对你有帮助,随手点『好看』、转发分享,也是对我的支持
关注我的微信公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。
点击“阅读原文”查看更多分享

极客工作室
一个专注于嵌入式系统、智能硬件、AIoT的极客自媒体
 最新文章