大型开发项目中 git 工作流的最佳实践
Gitflow Workflow 是一个 Git 工作流,有助于持续软件开发和实施 DevOps 实践。 它由文森特·德里森 (Vincent Driessen) 在 nvie 首次出版并广受欢迎。 Gitflow 工作流定义了围绕项目发布设计的严格分支模型。 这为管理大型项目提供了一个强大的框架。
Gitflow 非常适合具有预定发布周期的项目以及持续交付的 DevOps 最佳实践。 除了功能分支工作流所需的内容之外,此工作流不会添加任何新概念或命令。 相反,它为不同的分支分配非常具体的角色,并定义它们应该如何以及何时交互。 除了功能(feature)分支之外,它还使用单独的分支来准备、维护和记录发布。 当然,您还可以利用 Feature Branch Workflow 的所有优势:拉取请求、独立实验和更高效的协作。
Getting Started
Gitflow 实际上只是 Git 工作流的一个抽象概念。 这意味着它决定了要设置什么样的分支以及如何将它们合并在一起。 我们将触及以下分支的目的。 git-flow 工具集是一个具有安装过程的实际命令行工具。 git-flow 的安装过程很简单。 git-flow 软件包可在多个操作系统上使用。 在 OSX 系统上,您可以执行 brew install git-flow。 在 Windows 上,您需要下载并安装 git-flow。 安装 git-flow 后,您可以通过执行 git flow init 在您的项目中使用它。 Git-flow 是 Git 的包装器。 git flow init 命令是默认 git init 命令的扩展,除了为您创建分支外,不会更改存储库中的任何内容。
How it works
Develop and Main Branches
此工作流使用两个分支来记录项目的历史记录,而不是单个 main 分支。 Main 存储官方发布历史,开发分支作为功能的集成分支。 用版本号标记主分支中的所有提交也很方便。
第一步是用一个 develop 分支补充默认的主分支。 一种简单的方法是让开发人员在本地创建一个空的 develop 分支并将其推送到服务器:
git branch develop git push -u origin develop
该分支将包含项目的完整历史记录,而 main 将包含一个删节版本。 其他开发人员现在应该克隆中央存储库并为 develop branch 创建一个跟踪分支。
Feature Branches
每个新功能都应该驻留在自己的分支中,可以将其推送到中央存储库进行备份/协作。 但是,feature 分支不是从 main 分支出来,而是使用 develop
作为它们的父分支。 当一个功能完成时,它会被合并回 develop branch 。 功能不应该直接与 main branch 交互。
请注意, feature 分支与 develop 分支相结合,就所有意图和目的而言,都是功能分支工作流。 但是,Gitflow 工作流并不止于此。
feature 分支通常基于最新的开发分支创建。
Creating a feature branch
git checkout develop git checkout -b feature_branch
Finishing a feature branch
当您完成该功能的开发工作后,下一步是将 feature_branch 合并到 develop 中。
git checkout develop git merge feature_branch
Release Branches
一旦 develop 获得了足够的发布功能(或预定的发布日期即将到来),您就可以从 develop 中分出一个 release 分支。创建此分支将启动下一个发布周期,因此在此之后不能添加任何新功能——只有错误修复、文档生成和其他面向发布的任务应该在此分支中进行。
一旦准备好发布, release 分支就会合并到 main 分支并标记一个版本号。此外,它应该合并回 develop branch,自发布开始以来,后者可能已经取得了进展。
使用一个专门的分支来准备发布可以让一个团队完善当前版本,而另一个团队继续为下一个版本开发功能。它还创建了明确定义的开发阶段(例如,很容易说“本周我们正在为 4.0 版做准备”,并在存储库的结构中实际看到它)。
制作 release 分支是另一个简单的分支操作。与功能分支一样,release 分支基于 develop 分支。可以使用以下方法创建新的发布分支。
git checkout develop git checkout -b release/0.1.0
一旦发布准备好发布,它将合并到 main 和 develop,然后Release 分支将被删除。 合并回 develop 很重要,因为关键更新可能已添加到 Release 分支,并且需要新功能可以访问它们。如果您的组织强调代码审查,这将是拉取请求的理想场所。
要完成发布分支,请使用以下方法:
git checkout main git merge release/0.1.0
Hotfix Branches
Maintenance 或“hotfix”分支用于快速修补生产版本。 Hotfix 分支很像 release 分支和 feature 分支,只是它们基于 main 而不是 develop。 这是唯一应该直接从 main 分叉出来的分支。 修复完成后,应将其合并到 main 和 develop(或当前 release 分支)中,并且 main 应使用更新的版本号进行标记。
拥有专门的错误修复开发线,您的团队可以在不中断工作流程的其余部分或等待下一个发布周期的情况下解决问题。 您可以将 Maintenance 分支视为直接与 main 一起工作的临时 release 分支。 可以使用以下方法创建修补程序分支:
git checkout main git checkout -b hotfix_branch
类似于完成发布分支,修补程序分支合并到主分支和开发分支。
git checkout main git merge hotfix_branch git checkout develop git merge hotfix_branch git branch -D hotfix_branch
总结
develop 分支是从 main 分支创建的
从 develop 创建一个 Release 分支
feature 分支是从 develop 创建的
当一个功能完成时,它会被合并到 develop 分支中
release 分支完成后,它会合并到 develop 和 main
如果在 main 中检测到问题,则从 main 创建一个 hotfix 程序分支
修补程序完成后,它将合并到 develop 和 main 分支