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简单好用?” 推 ...
随机推荐
- 自动化不知如何参数化?xlrd来帮你解决
平时在做自动化测试的时候,一直都是要求数据与业务逻辑分离.把测试数据都写在业务里面的话,比较混杂.为了方便管理测试数据,所以引入了python的一个扩展库--xlrd.该库使用简单,能满足自动化测试的 ...
- Html5 表单元素基础
表单元素 1.定义: 表单是提供让读者在网页上输入,勾选和选取数据,以便提交给服务器数据库的工具.(邮箱注册,用户登录,调查问卷等) 2.表单元素(下拉框,输入框……) 3.表单主结构: <fo ...
- C#中使用ajax请求
ajax简介 Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式.快速动态网页应用的网页开发技术,无需重新加载 ...
- C/C++编程笔记:inline函数的总结!C/C++新手值得收藏!
在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数. 栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间. 在系统下, ...
- 4.22 省选模拟赛 三元组 manacher 回文自动机
容易发现可以枚举j 那么只需要计算出 l~j这段是回文串的l的和 以及j+1~r这段是回文串的r的和. 可以manacher 之后想要求出以j为右端点的回文串左端点的和 这个东西我们通过某个点为中心的 ...
- ASP.NET MVC+LayUI视频上传
前言: 前段时间在使用APS.NET MVC+LayUI做视频上传功能的时,发现当上传一些内存比较大的视频就会提示上传失败,后来通过查阅相关资料发现.NET MVC框架为考虑安全问题,在运行时对请求的 ...
- easyui 属性 事件 方法
在easyui当中 属性和事件可以按照json定义的对象来使用. /*在easyui中 属性和事件的使用方法相同*/ var loginWinJson = { closed: false, closa ...
- Qt信号参数中使用QVariantList时编译问题
今天调试代码时遇到一个奇怪的问题,不过一般感觉比较奇怪的问题,最后查到原因时,原因都比较简单! 编译问题 先来看一下qt的编译错误,提示一堆错误: In file included from D:\Q ...
- Python自动化办公知识点整理汇总
知乎上有人提问:用python进行办公自动化都需要学习什么知识呢? 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却 ...
- 修改jar包配置文件的正确操作,jar包解压出来的文件夹重新打成jar,不依靠开发工具!!!!
修改jar包配置文件的正确操作,有的时候通过一些解压工具可以对内部的文件进行修改,但是有时候会无效.这就很烦了 一.背景: 有一个springboot项目,事先我已经用编译好打成jar包以 ...