mac中使用Sourcetree的git flow

前言

因为Sourcetree的mac版本和window版本界面和操作方式有所差异,一直在网上找不到合适的教程或者指导说明,就干脆自己写一个。
如果已经了解什么是git flow工作流及其代码操作方式的同学,可以直接跳到 3.mac中使用Sourcetree实现git flow 这一步进行学习。

1.git flow工作流

1.1 什么是git flow

2010年5月,在一篇名为“A successful Git branching model”的博文中,原Git Prime的首席技术官Vincent Driessen介绍了一种构建在Git(一个开源的分布式版本控制系统)之上的软件开发模型。通过利用Git创建和管理分支的能力,为每个分支设定具有特定的含义名称,并将软件生命周期中的各类活动归并到不同的分支上,实现了软件开发过程不同阶段的相互隔离。这种软件开发的活动模型被Vincent称为“Git Flow”(Git工作流程)。Git Flow已经开始流行于基于主干的工作流,它现在被认为是现代连续软件开发和DevOps(开发、技术运营和质量保障三者的交集)实践的最佳实践。

1.2 git flow上的分支

git flow的核心就是分支(branch),通过在项目的不同阶段,创建不同的分支并完成不同的操作来实现一个完整高效的工作流。git glow的分支又分为两大类:长期分支和短期分支,其中主分支包括master(主要分支)和develop(开发分支),辅助分支包括feature(功能分支)、release(预发布分支)、hotfix(补丁分支)和其他自定义分支。

1.2.1 长期分支

    1. master(主要分支)
    • 版本库初始化以后自动建立的
    • 代码库中有且仅有一个主分支,不可删除
    • 不要直接修改master分支代码
    • master分支对外发布,每一次推送应该打标签(tag)做记录,方便追溯
    1. develop(开发分支)
    • 基于master分支创建
    • 代码库中有且仅有一个开发分支,不可删除
    • 不要直接修改master分支代码

1.2.2 短期分支

    1. feature (功能分支)
    • 新功能或新特性开发分支
    • 基于develop分支创建
    • 新特性或新功能开发完成,合到develop分支
    • 临时分支,功能完成后可删除
    1. release (预发布分支)
    • 基于develop分支创建(feature分支合并到develop分支之后)
    • 临时分支,产品上线后可选删除
    • 发布到内部测试区,供测试人员测试
    1. hotfix (补丁分支)
    • 基于master创建
    • 对线上的版本打补丁或bug修复
    • 修复完成后,合并到master分支和develop分支
    • 临时分支,修复上线后可删除

1.3 图解git flow 工作流程

1.3.1 创建初始化仓库

(1)初始化仓库(需要已经存在master分支,目前git项目主分支时main分支,可以先创建master分支后删除main分支,或者直接使用main分支作为主分支)
(2)基于master分支创建develop分支
在这里插入图片描述

1.3.2 开发创建功能分支

(1)基于develop分支创建feature分支
(2)功能分支开发完成后,合并到develop分支
在这里插入图片描述

1.3.3 预发布分支

(1)基于develop创建release分支
(2)完成后merge到master分支,同时打个标签,之后在merge到develop分支在这里插入图片描述

1.3.4 hotfix修复分支(线上版本出现bug)

(1)基于master创建hotfix分支
(2)修复bug后,merge到master分支,同时打个标签,再merge到develop分支
在这里插入图片描述

2.使用git命令行实现git flow

2.1 git flow初始化项目

(1)创建并切换到develop分支(基于master分支)

git checkout -b develop master

(2)创建并切换到feature分支(基于develop分支)

git checkout -b feature/Vx.x.xx.xx develop

feature/Vx.x.xx.xx中的x.x.xx.xx
第一个x代表着主版本
第二个x代表着次版本
第三个xx代表着补丁版本
按理说到这里就结束了,但是因为git项目经常是多人开发,因此为了避免频繁地更替补丁版本,因此又加了一级。

详情可参照npm的语意版本控制

2.2 功能开发(feature分支)

完成功能开发后,将功能合并到develop分支

# 切换到develop分支
git checkout develoop
# 合并功能分支
git merge feature/Vx.x.xx.xx
# 删除功能分支
git branch -d feature/Vx.x.xx.xx

当然你也可以选择不删feature-x分支,但是通常情况下,因为分支已经合并到develop分支,这就意味着feature/Vx.x.xx.xx分支的工作已经结束,并且创建新的预发布分支,测试其内容,并且进行修正。因此feature/Vx.x.xx.xx分支就没有了存在的意义,并且在版本迭代快速的今天,删除已经完成其使命的ffeature/Vx.x.xx.xx是一个明智之选。

2.3 预发布(release分支)

(1)创建release预发布分支

git checkout -b release/Vx.x.xx.xx develop

(2)完成后,合并到master分支

# 切换到master分支
git checkout master
# 合并release/Vx.x.xx.xx分支到master分支
git merge release/Vx.x.xx.xx
# 打个标签,用于后续的正式发布,其中xxxxxxxx表示日期,例如20221017,如果一天内多次发布,还可以在xxxxxxxx之前加上_xx,表示第几次发布,比如Vx.x.xx.xx_01.20221017表示20221017版本x.x.xx.xx的第二次发布(第一次为_00,通常可以省略)。
git tag -a Vx.x.xx.xx.xxxxxxxx

(3)将release分支合并到develop分支

git checkout develop
git merge release/Vx.x.xx.xx

(4)合并完成之后删除release分支

git branch -d release/Vx.x.xx.xx

2.4 修复上线版本bug(hotfix分支)

(1)创建hotfix分支

git checkout -b hotfix/Vx.x.xx.xx

(2)完成后合并到master分支

git checkout master
git merge hotfix/Vx.x.xx.xx
# 打标签,标签规则和之前类似,只是在_xx和xxxxxxxx添加了一个hotfix表示修复版本
git tag -a V.x.x.xx.xx.hotfix.xxxxxxxx

(3)合并到develop分支

git checkout develop
git merge hotfix/Vx.x.xx.xx

(4)删除hotfix分支

git branch -d hotfix/Vx.x.xx.xx

以上就基本完成了git flow开发的流程。

3.mac中使用Sourcetree实现git flow

3.1 准备工作

本地创建一个新项目,比如使用vue create 项目名称按照流程创建一个Vue2默认项目(因为只是演示git flow的使用方式,项目就使用简单的设置)。在git上创建远程仓库后,建立连接。

如图,我创建了一个名为git-flow的项目,建立连接,使用it push -u origin "master"命令推送代码,发现提示报错,本地并没有master分支,这是因为美国之前的人种冲突事件,给master分支(master也意味着主人)蒙上了一层阴影。因此之前git上创建的新项目默认的master分支也被改为了main分支。
在这里插入图片描述
但是,Sourcetree可能因为并不是用于创建项目,而是管理项目,因此考虑到以往的使用者项目,仍然沿用master分支作为git flow的主分支。
在这里插入图片描述

3.2 创建初始仓库

鉴于我们在本地已经有了初始仓库,就不使用“从url克隆的方式”拉取代码了。选择“扫描文件夹”,
在这里插入图片描述
选中项目外一层文件夹即可扫描到本地已有的git项目,勾选需要使用Sourcetree管理的项目,点击添加多个仓库即可。
在这里插入图片描述
可以看到Sourcetree的目录列表就有了我们的项目,并且在最右侧展示当前项目在本地的分支。
在这里插入图片描述

3.3 使用git flow初始化——会自动创建并切换到develop分支

(1)双击项目,进入管理界面
在这里插入图片描述
在这里插入图片描述
(2)尝试git flow初始化仓库
点击仓库 -> git-flow 或 hg flow -> 初始化仓库
在这里插入图片描述
在这里插入图片描述
可以看到,默认生产环境分支是master,如果直接点击确定,则无法继续下一步。现在我们有两种选择,要么将生产环境分支改为main,要么新建一个master分支。两种都可以,我选择按照提示选择后者。
在这里插入图片描述
(3)创建新分支master
点击分支,输入master作为新分支名称,创建分支。
在这里插入图片描述
可以看到,本地基于main分支就创建了一个master分支,并且main分支前面的小圆圈变到了master分支前面,这代表Sourcetree在创建分支后,自动切换到了该分支(如果希望切回main分支,双击该分支即可)。
在这里插入图片描述
(4)删除main分支
在这里插入图片描述
因为之前没有将main分支上传到远程,直接勾选强制删除,确定即可。
在这里插入图片描述
(5)正式构建git flow工作流
在这里插入图片描述
在这里插入图片描述
可以看到,本次构建git flow工作流成功,并且自动创建和切换了develop分支作为开发分支。
在这里插入图片描述

3.5 推送代码到远端

点击推送,选中需要推送的分支,点击确定。
在这里插入图片描述
可以看到Sourcetree上的远端-origin下出现了master和develop分支。切换到gitee上查看也有,说明推送成功。
在这里插入图片描述
在这里插入图片描述

3.6 创建feature功能分支(基于develop)

(1)创建一个功能分支。
选择 仓库 -> git flow 或 hg flow -> 下个操作,建立新的功能(或者直接选择 仓库 -> git flow 或 hg flow -> 建立新的功能),输入功能名称,点击确定,就新建了一个feature/V1.0.00.00分支。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
因为feature分支随着功能的增加,版本会逐渐增多,Sourcetree使用文件夹的形式显示。
在这里插入图片描述
在这里插入图片描述
(2)推送feature分支到远端。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.7 完成feature功能分支开发,提交本地,并推送到远端

(1)模拟完成feature功能分支开发
在这里插入图片描述
(2)提交本地代码,并推送到远端
点击仓库 -> 提交。
在这里插入图片描述
选中需要提交的文件,写入提交的注释,选择立即推送,点击提交。
在这里插入图片描述
可以看到,文件已经成功推送到了远端上。
在这里插入图片描述
在这里插入图片描述

3.8 合并到develop分支(可选择是否删除feature/V1.0.00.00分支)

在这里插入图片描述
点击完成当前项目
在这里插入图片描述
默认是删除分支(如果确认要删除,那就选择),我选择保留分支,点击确定。
在这里插入图片描述
合并完成后,可以看到develop分支超前了一个版本。
在这里插入图片描述
可以看到 feature/V1.0.00.00 分支确实合并(merge)到了 develop,但是develop并没有提交到远端。
在这里插入图片描述
在这里插入图片描述

3.9 创建release预发布分支(基于develop)

之前的feature分支合并到develop分支后,可以不着急将develop推送到远端。可以先创建一个release分支,用于测试,等待测试完成通过后,再进行合并推送。
(1)创建release分支
初学者通常选择下个操作来查看和使用git flow进行的步骤。当然,如果你已经和熟练该流程,就可以直接使用下个操作下面的 “建立新的发布版本” 等操作。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)点击推送,推送到远端
在这里插入图片描述
在这里插入图片描述

3.10 修改预发布分支

(1)修改
此时测试如果发现了问题,就需要对代码就行修改。
在这里插入图片描述
(2)提交并推送
修改完成后重新提交推送。
在这里插入图片描述
在这里插入图片描述

3.10 完成预发布版本(merge到master分支和dev分支)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从Sourcetree上可以看出,完成预发布版本,实际上做了下面几件事:
1、将该release分支merge(合并)到了master分支,随后将master分支推送到远端,并且打了个标签。
2、将该release分支删除。
3、将刚打的标签分支merge(合并)到了develop分支,并推送到了远端。

3.11 创建hotfix分支(基于master)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
推送到远端
在这里插入图片描述
在这里插入图片描述

3.12 修复hotfix版本的bug

修复bug
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.13 完成hotfix补丁版本

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从Sourcetree上可以看出,完成hotfix补丁版本,其实做的事情和完成release分支版本类似:
1、将该release分支merge(合并)到了master分支,随后将master分支推送到远端,并且打了个标签。
2、将该release分支删除。
3、将刚打的标签分支merge(合并)到了develop分支,并推送到了远端。

4.半路加入一个git flow流程项目,我们该做什么

4.1 克隆项目

在这里插入图片描述
因为我本地已经有一个项目了,所以我修改了个名称,命名为git-flow-copy进行克隆。
在这里插入图片描述
在这里插入图片描述

可以看到新克隆下的项目,远端的分支和标签版本都可以看到,但是本地默认只有master分支。

4.2 初始化git flow

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
git flow初始化后,本地创建并切换到了develop分支

4.3 检出需要的分支

如果需要其他分支,右键,检出即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.4 删除本地分支和远程分支

4.4.1 删除本地分支

注意:当你在某一分支时,无法删除当前分支,必须要切换到其他分支之后才行。
在这里插入图片描述
建议切换到master主分支(通常主分支不会删除),右键需要删除的分支
在这里插入图片描述
注意到这里有强制删除和删除远程分支选项。后者我们理解,那强制删除和删除有什么区别吗?我们都尝试看看。
在这里插入图片描述
(1)不选择强制删除
在这里插入图片描述重新检出,没有问题
在这里插入图片描述
(2)选择强制删除
在这里插入图片描述
没有任何区别,还是可以检出。所以强制不强制的区别是什么,目前还不太清楚,以后遇到,再退回来完善。
在这里插入图片描述

4.4.2 删除远程分支(慎重!确认将当前分支合并到develop分支和主分支后再删除)

方法一:在删除本地分支的时候,勾选删除远程分支。
在这里插入图片描述

方法二:直接右键远程中需要删除的分支,点击删除。
在这里插入图片描述

4.5 多人版本,多个分支的合并

4.5.1 模拟多个版本

(1)按照 3.6 的方式,创建一个新的feature/V1.0.00.01功能分支。
在这里插入图片描述
在这里插入图片描述
(2)模拟新功能开发
在这里插入图片描述
完成功能开发后,Sourcetree点击仓库 -> 提交
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们选择保留分支
在这里插入图片描述

(3)发布新的预发布版本
在这里插入图片描述
(4)推送预发布版本到远程
在这里插入图片描述
(5)完成预发布项目

在这里插入图片描述
在这里插入图片描述
(6)同理,创建一个feature/V1.0.01.00分支,但是我们需要做些改动。比如,增加一个组件,修改一些文字等。
在这里插入图片描述
执行提交推送。之后,按照git-flow的下个操作继续执行即可,记得完成feature分支后,推送develop分支。
在这里插入图片描述
但是创建新的release分支时,会有一个问题,如果保留之前的release分支,将无法创建新的release分支。本节内容关键是如何合并分支,先不在意这些细节。暂时不用release分支测试合并,使用feature分支做合并测试。
在这里插入图片描述
(7)基于 feature/V1.0.00.01分支 创建 feature/V1.0.00.02分支
在这里插入图片描述
在这里插入图片描述
(8)合并feature/V1.0.00.02分支到feature/V1.0.01.00分支

git checkout feature/V1.0.01.00
git merge feature/V1.0.00.02

发现冲突,
在这里插入图片描述
在这里插入图片描述
重新提交推送
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39055970/article/details/127210090