一、Git 概述
git
Git是一款分布式版本控制系统,它是由Linus Torvalds在2005年开发的,用于管理软件开发过程中的源代码。Git可以跟踪文件的修改历史,并支持多人协作开发,可以在不同的开发分支上进行代码的编辑和测试,最后将代码合并到主分支上。
Git的主要特点包括:
- 分布式:每个开发者都可以在自己的本地计算机上拥有一份完整的代码仓库,不需要依赖于中央服务器。
- 高效性:Git的设计非常高效,可以快速地处理大量的代码文件和版本历史记录。
- 强大的分支管理:Git支持创建多个分支,可以同时进行多个开发任务,最后将分支合并到主线上。
- 安全性:Git使用SHA-1算法来保证代码的完整性,每次提交都会生成一个唯一的SHA-1值。
- 开源:Git是一款开源的软件,任何人都可以免费使用和修改它的源代码。
因为其高效、强大和安全的特性,Git已经成为了当今软件开发领域中最流行的版本控制系统之一。
git 操作
git指令集合
git 工具
客户端
- SourceTree:
- GitKraken
vscode插件
- GitLens:这是一个功能强大的 Git 工具,提供了许多有用的功能,如代码注释、历史记录、文件比较等。
- GitLens — Git supercharged:这是 GitLens 的增强版,提供了更多的功能和定制选项,支持多种语言。
- Git History:这个插件可以让你在 VS Code 中查看 Git 仓库的历史记录,包括提交信息、作者、时间等。
- Git Graph:这个插件提供了一个可视化的 Git 图形界面,可以帮助你更好地理解 Git 分支、合并等操作。
- Git Blame:这个插件可以在代码中显示每一行的 Git 提交信息,包括作者、时间、提交信息等。
其他
- pre-commit:它属于 Git 钩子(Git Hooks)的一种。Git 钩子是 Git 提供的一种机制,允许在 Git 操作的不同阶段执行自定义脚本,以实现一些自定义功能或规则,比如:对指定的文件进行检查,如代码风格、语法错误等。
二、常见的工作流程模型
GitFlow
概述
GitFlow 是一种基于 Git 的分支管理工具,它定义了一套固定的分支管理流程,包括 Master 分支、Develop 分支、Feature 分支、Release 分支和 Hotfix 分支。
流程图
- Master分支:主分支,用于存储稳定的代码,只有经过测试和审核后的代码才能合并到该分支。
- Develop分支:开发分支,用于存储正在开发的代码,所有的开发工作都在该分支上进行。
- Feature分支:特性分支,用于开发新功能或修复bug,从develop分支上分出来,完成后再合并回develop分支。
- Release分支:发布分支,用于准备发布新版本,从develop分支上分出来,完成后合并回develop和master分支。
- Hotfix分支:热修复分支,用于修复master分支上的bug,从master分支上分出来,完成后合并回master和develop分支。
特点
全而复杂
优缺点
优点:
- 有清晰的分支结构,易于管理和维护。
- 支持多版本的同时开发和发布,适合大型团队协作。
- 保证主分支的稳定性和代码质量,适合长期维护的项目
- 方便进行版本控制和回滚。
缺点:
- 工作流程比较复杂,需要花费一定的时间和精力来学习和理解。
- 分支较多,容易出现分支混乱和冲突的问题。
- 需要进行频繁的合并和发布操作,可能会增加开发者的工作量和时间成本。
- 不太适合快速迭代的项目,因为需要经过多个环节才能发布新版本。
GitFlow 工作流程模型适合中大型企业,适合长期维护的大型项目,但对于小型团队和快速迭代的项目来说,可能会过于复杂。
常见的问题
合并冲突 如何进行提测,提测功能的稳定性、独立性、隔离性
GithubFlow
概述
GithubFlow 是一种简单的分支管理工具,它只有一个主分支 master,开发者在该分支上创建新的 Feature 分支,完成后合并回主分支。GithubFlow 的工作流程简单,适合小型团队协作、快速迭代的项目。
流程图
- master作为代码库的稳定版本
- feature/bugfix是开发分支
- 在开发分支上完成开发工作后,向主分支提交一个 Pull Request(PR),并请求代码审核和合并。
- 团队成员对 PR 进行代码审核和测试,并提出修改意见和建议,直到代码满足要求并通过审核。
特点
简单、易懂
优缺点
优点:
- 简单易懂:只有一个主分支和一个开发分支,易于理解和使用。
- 快速迭代:支持快速迭代,频繁地提交代码并进行部署和测试
- 适合小团队:不需要复杂的协调和管理,可以快速响应需求变化。
- 支持持续集成和部署
缺点:
-
适用范围有限:Github Flow 适合小团队和单一产品的开发,但对于大型团队和复杂的产品开发,可能不够灵活和高效。
-
主分支管理困难:Github Flow 只有一个主分支,可能会导致主分支管理困难,特别是在多个开发分支同时提交代码时。
-
需要高度的自律性:Github Flow 要求开发者具有高度的自律性和责任心,需要遵守代码提交和部署的规范和流程。
-
不支持代码回滚:Github Flow 不支持代码回滚,如果出现严重的 Bug 或者错误,需要手动回滚代码,可能会导致部署和测试的延迟。
GitlabFlow
概述
GitlabFlow 是 GitLab 推荐的一种分支管理工具,它类似于 GitFlow,但是将 Master 分支和 Develop 分支合并为一个主分支,即默认情况下只有一个主分支。GitlabFlow 的工作流程简单,适合小型团队协作、快速迭代的项目。
流程图
它是 Git flow 与 Github flow 的综合。吸取了两者的优点,既有适应不同开发环境的弹性,又有单一主分支的简单和便利。
Gitlab flow 的最大原则叫做"上游优先"(upsteam first),即只存在一个主分支 master,它是所有其他分支的"上游"。只有上游分支采纳的代码变化,才能应用到其他分支。
开发者在开发分支上完成开发工作后,向主分支提交一个 Merge Request(MR),并请求代码审核和合并。
- 持续发布
对于持续发布的项目,它建议在 master 分支以外,再建立不同的环境分支,每个环境都有对应的分支。比如,开发环境的分支是 master,预发环境的分支是 pre-production,生产环境的分支是 production。
- 开发分支 master 用于发布到测试环境,该分支为受保护的分支。
- 预发分支 pre-production 用于发布到预发环境,上游分支为 master。
- 正式分支 production 用于发布到正式环境,上游分支为 pre-production。
- 版本发布 建议的做法是每一个稳定版本,都要从 master 分支拉出一个分支,比如 2-3-stable、2-4-stable 等。 在出现 bug 后,根据对应的 release branch 创建一个修复分支,修复工作完成后,一样要按照上游优选的原则,先合并到 master 分支,经过测试才能够合并到 release 分支,并且此时要更新小版本号。
特点
支持环境分支
优缺点
优点:
- 区分不同环境的部署 缺点:
- 分支多,流程管理复杂。
AoneFlow
概述
AoneFlow 工作流程模型是由阿里巴巴提出的一种基于 Git 的分支管理模型。它的设计目的是为了解决传统的 Gitflow 模型在多人协作开发和持续集成方面存在的一些问题。
流程图
- 主干创建特性分支,且不允许合并回主干分支
- 合并特性分支,形成发布分支
- 发布到线上正式环境后,合并相应的发布分支到主干,在主干添加标签,同时删除该发布分支关联的特性分支
优缺点
优点:
- 灵活易用,通过组合生成分支往往可以实现多种高级玩法 缺点:
- 复杂度稍高,如果没有配套的工具规范往往会出现“无效分支”的出现
参考
ThrukBased
待完善
三、模型选择
待完善