5 个 Git 工作流,改善你的开发流程

- 原文地址:5 Git workflows you can use to deliver better code and improve your development process
- 原文作者:Vikash Koushik
- 译者:陈元
- 校对者:HelloGitHub-丫丫
我还没有遇到过一个开发人员,在查看 Git 分支合并的冲突信息时不抓耳挠腮。
解决 Git 合并冲突是每个开发人员都讨厌的事情之一,尤其是当你准备进行生产环境部署时!
正确的设置 Git 工作流可以改善你的 开发流程 。
当然,拥有正确的 Git 工作流并不能解决你的所有问题。但这是朝正确方向迈出的一步。毕竟,由于每个团队都是远程工作的,在不破坏代码库的情况下共同开发产品功能是非常重要的。
如何设置 Git 工作流取决于你正在开发的项目、团队的发布计划、团队的规模等等!
在本文中,我们将向你介绍 5 种不同的 Git 工作流,它们的优点,缺点以及使用它们的时机。让我们开始吧!
1. 基本的 Git 工作流
最基本的 Git 工作流是只有一个分支 - master 分支的模式。开发人员直接提交 master 分支并使用它来部署到预发布和生产环境。

上图为基本的 Git 工作流,所有提交都直接添加到 master 分支。
通常不建议使用此工作流,除非你正在开发一个 side 项目并且希望快速开始。
由于只有一个分支,因此这里实际上没有任何流程。这样一来,你就可以轻松开始使用 Git。但是,使用此工作流时需要记住它的一些缺点:
- 在代码上进行协作将导致多种冲突。
- 生产环境出现 bug 的概率会大增。
- 维护干净的代码将更加困难。
2. Git 功能分支工作流
当你有多个开发人员在同一个代码库上工作时,Git 功能分支工作流将成为必选项。
假设你有一个正在开发一项新功能的开发人员。另一个开发人员正在开发第二个功能。现在,如果两个开发人员都向同一个分支提交代码,这将使代码库陷入混乱,并产生大量冲突。

上图为具有功能分支的 Git 工作流模型。
为避免这种情况,两个开发人员可以分别从 master 分支创建两个单独的分支,并分别开发其负责的功能。完成功能后,他们可以将各自的分支合并到 master 分支,然后进行部署,而不必等待对方的功能开发完成。
使用此工作流的优点是,Git 功能分支工作流使你可以在代码上进行协作,而不必担心代码冲突。
3. 带有 Develop 分支的 Git 功能分支工作流
此工作流是开发团队中比较流行的工作流之一。它与 Git 功能分支工作流相似,但它的 develop 分支与 master 分支并行存在。
在此工作流中,master 分支始终代表生产环境的状态。每当团队想要部署代码到生产环境时,他们都会部署 master 分支。
Develop 分支代表针对下一版本的最新交付的代码。开发人员从 develop 分支创建新分支,并开发新功能。功能开发完毕后,将对其进行测试,与 develop 分支合并,在合并了其他功能分支的情况下使用 develop 分支的代码进行测试,然后与 master 分支合并。

上图为具有 develop 分支的 Git 功能分支工作流模型。
此工作流的优点是,它使团队能够一致地合并所有新功能,在预发布阶段对其进行测试并部署到生产环境中。尽管这种工作流让代码维护变得更加容易,但是对于某些团队来说,这样做可能会感到有些疲倦,因为频繁的 Git 操作可能会让你感到乏味。
4. Gitflow 工作流
Gitflow 工作流与我们之前讨论的工作流非常相似,我们将它们与其他两个分支( release 分支和 hot-fix 分支)结合使用。
4.1 Hot-Fix 分支
Hot-fix 分支是唯一一个从 master 分支创建的分支,并且直接合并到 master 分支而不是 develop 分支。仅在必须快速修复生产环境问题时使用。该分支的一个优点是,它使你可以快速修复并部署生产环境的问题,而无需中断其他人的工作流,也不必等待下一个发布周期。
将修复合并到 master 分支并进行部署后,应将其合并到 develop 和当前的 release 分支中。这样做是为了确保任何从 develop 分支创建新功能分支的人都具有最新代码。
4.2 Release 分支
在将所有准备发布的功能的代码成功合并到 develop 分支之后,就可以从 develop 分支创建 release 分支了。
Release 分支不包含新功能相关的代码。仅将与发布相关的代码添加到 release 分支。例如,与此版本相关的文档,错误修复和其他关联任务才能添加到此分支。
一旦将此分支与 master 分支合并并部署到生产环境后,它也将被合并回 develop 分支中,以便之后从 develop 分支创建新功能分支时,新的分支能够具有最新代码。

上图为具有 hot-fix 和 release 分支的 Gitflow 工作流模型
此工作流由 Vincent Driessen 首次发布并广受欢迎,已被具有预定发布周期的组织广泛使用。
由于 git-flow 是对 Git 的包装,因此你可以为当前代码库安装 git-flow。git-flow 非常简单,除了为你创建分支外,它不会更改代码库中的任何内容。
要在 Mac 机器上安装 ,请在终端中执行 brew install git-flow 。
要在 Windows 机器上安装,你需要 下载并安装 git-flow 。安装完成后,运行 git flow init 命令,就可以在项目中使用它了。
5. Git Fork 工作流
Fork 工作流在使用开源软件的团队中很流行。
该流程通常如下所示:
- 开发人员 fork 开源软件的官方代码库。在他们的帐户中创建此代码库的副本。
- 然后,开发人员将代码库从其帐户克隆到本地系统。
- 官方代码库的远端源已添加到克隆到本地系统的代码库中。
- 开发人员创建一个新的功能分支,该分支将在其本地系统中创建,进行更改并提交。
- 这些更改以及分支将被推送到其帐户上开发人员的代码库副本。
- 从该新功能分支创建一个 pull request,提交到官方代码库。
- 官方代码库的维护者检查 pull request 中的修改并批准将这些修改合并到官方代码库中。
你自己的工作流!
我在本文中描述的 Git 工作流是一些在开发团队中非常流行和最佳的工作流的示例。也有一些团队为预发布创建分支,并且该分支非常适合他们。所以你可以参考这些工作流,然后创建自己的 Git 工作流。
本文使用免费文档翻译工具 Breword 进行翻译,它支持:机器预翻译、可视化编辑器、协作翻译、审校、一键生成文档网站、自动监测文档更新、导出等。让翻译工作变得更加简单、高效、可维护,快去试试吧!
breword 官网:https://www.breword.com/

翻译开源项目文档、文章都是为开源社区做贡献(题材:GitHub、编程、程序员),欢迎热爱技术和开源的小伙伴加入 HG 推出的译文亦舞系列的翻译中来,可添加微信号:HelloGitHub(备注:翻译)。
5 个 Git 工作流,改善你的开发流程的更多相关文章
- 【Git 使用笔记】第四部分:git在公司中的开发流程
先声明几个变量 仓管A:主分支,只有master分支仓管B:开发分支,只有各个业务开发分支 仓管B fork 于 A 如下图 为了保证 代码的稳定性,只有 仓管B中的某个分支测试完毕并进行了代码r ...
- 使用git和github进行协同开发流程
(本文假设各位已经对基本git的基本概念.操作有一定的理解,如无相关git知识,可以参考Pro Git这本书进行相关的学习和练习) 很多项目开发都会采用git这一优秀的分布式版本管理工具进行项目版本管 ...
- 使用git和gitlab进行协同开发流程
一.基本概念 1.仓库(Repository) ①源仓库(线上版本库) 在项目的开始,项目的发起者构建起一个项目的最原始的仓库,称为origin. 源仓库的有两个作用: 1.汇总参与该项目的各个开发者 ...
- 也谈基于Web的含工作流项目的一般开发流程
项目包含的通用模块代码等我有时间一并剥离贡献出来(基于WebSocket的通知引擎,工作流整合模块,自定义表单,基于RBAC权限设计),最近太忙了,Web项目有一段时间没碰,有点生疏的感觉,主要在忙G ...
- Git-flow 一个简单高效的Git工作流
背景 由于Git的分支比SVN更好管理且更易使用,最近团队从SVN迁移到Git,需要重新规划开发流程,最终确定使用Git-flow工作流,这是目前比较流行的一种分支模型,下面是Git-flow的简易流 ...
- 如何让Git适应敏捷开发流程?
一旦涉及到版本控制系统,Git实际上代表敏捷开发的水平.Git作为一款强大的开源系统,有较强的灵活性,可以按需匹配任何开发团队的工作流程.而这种分布式相比较集中式来说,可以赋予系统更好的性能特征,且允 ...
- 开发环境之git:团队协作git工作流与常用命令
此篇文章只是一篇傻瓜式的,记录工作中比较规范且常见的一个git工作流需要用到的命令,让你可以快速的开始工作.而不是一些长篇大论的理论知识,如果你有用过sourcetree或者其它图形化工具,结合你正在 ...
- 项目开发中git常用命令、git工作流、git分支模型
#新建代码库git init # 在当前目录新建一个Git代码库git init [project-name] # 新建一个目录,将其初始化为Git代码库git clone [url] # 下载一个项 ...
- 团队Git工作流总结
为什么使用Git “svn用了这么多年都好好的,为啥折腾搞Git?” “Git一点都不好用,提交个代码都提交不上去!” “Git这么复杂,命令多到记不住,而且完全用不到.哪有svn简单好用?” 推 ...
随机推荐
- Ansible部署zabbix-agent
playbook目录 zabbix/ ├── hosts ##定义的主机列表 ├── install_zabbix_agent.yml ##安装入口文件 └── roles ├── install_z ...
- 搭建NFS Server
搭建NFS Server Kubetrain K8S在线直播培训,内推机会 不满意可无条件退款 现在就去广告 #背景 Kubernetes 对 Pod 进行调度时,以当时集群中各节点的可用资源作为主要 ...
- laravel 迁移文件中修改含有enum字段的表报错解决方法
解决方法: 在迁移文件中up方法最上方加上下面这一行代码即可: Schema::getConnection()->getDoctrineSchemaManager()->getDataba ...
- Python循环控制语句
Python循环控制语句:主要有三种,break.continue 和 pass 语句. break 语句 :在语句块执行过程中,终止循环.并跳出整个循环. continue 语句 :在语句执行 ...
- gc 模块常用函数
""" 1.gc.set_debug(flags) 设置gc的debug日志,一般设置为gc.DEBUG_LEAK 2.gc.collect([generation]) ...
- 《闲扯Redis九》Redis五种数据类型之Set型
一.前言 Redis 提供了5种数据类型:String(字符串).Hash(哈希).List(列表).Set(集合).Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要. ...
- PHP xml_set_notation_decl_handler() 函数
定义和用法 xml_set_notation_decl_handler() 函数规定当解析器在 XML 文档中找到符号声明时被调用的函数. 如果成功,该函数则返回 TRUE.如果失败,则返回 FALS ...
- 区块链钱包开发 - USDT - 三、实战(nodejs版本)
一.安装钱包 请参考另一篇随笔: 入口 二.获取测试usdt(TestOmni)步骤: 1.导入地址到钱包,往该地址充值测试比特币, 2.然后往 moneyqMan7uh8FqdCA2BV5yZ8qV ...
- 2017面向对象程序设计(Java)第十三周助教工作总结
时间飞逝,本学期即将接近尾声.不知不觉同学们已经学习java十三个星期了,想必同学们对Java课程体系及内容有了更加深入的理解,也应该摸索出了一套适用于自己的学习方法. 下面我对上周工作做以简单总结: ...
- Kaggle-pandas(2)
Intndexing-selecting-assigning 教程 介绍选择要处理的pandas DataFrame或Series的特定值是几乎将要运行的任何数据操作中的一个隐含步骤,因此在Pytho ...