mac中使用Sourcetree的git flow

  • 前言
  • 1.git flow工作流
    • 1.1 什么是git flow
    • 1.2 git flow上的分支
      • 1.2.1 长期分支
      • 1.2.2 短期分支
    • 1.3 图解git flow 工作流程
      • 1.3.1 创建初始化仓库
      • 1.3.2 开发创建功能分支
      • 1.3.3 预发布分支
      • 1.3.4 hotfix修复分支(线上版本出现bug)
  • 2.使用git命令行实现git flow
    • 2.1 git flow初始化项目
    • 2.2 功能开发(feature分支)
    • 2.3 预发布(release分支)
    • 2.4 修复上线版本bug(hotfix分支)
  • 3.mac中使用Sourcetree实现git flow
    • 3.1 准备工作
    • 3.2 创建初始仓库
    • 3.3 使用git flow初始化——会自动创建并切换到develop分支
    • 3.5 推送代码到远端
    • 3.6 创建feature功能分支(基于develop)
    • 3.7 完成feature功能分支开发,提交本地,并推送到远端
    • 3.8 合并到develop分支(可选择是否删除feature/V1.0.00.00分支)
    • 3.9 创建release预发布分支(基于develop)
    • 3.10 修改预发布分支
    • 3.10 完成预发布版本(merge到master分支和dev分支)
    • 3.11 创建hotfix分支(基于master)
    • 3.12 修复hotfix版本的bug
    • 3.13 完成hotfix补丁版本
    • 4.半路加入一个git flow流程项目,我们该做什么
    • 4.1 克隆项目
    • 4.2 初始化git flow
    • 4.3 检出需要的分支
    • 4.4 删除本地分支和远程分支
      • 4.4.1 删除本地分支
      • 4.4.2 删除远程分支(慎重!确认将当前分支合并到develop分支和主分支后再删除)
    • 4.5 多人版本,多个分支的合并
      • 4.5.1 模拟多个版本

前言

因为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

发现冲突,


重新提交推送

mac中使用Sourcetree的git flow相关推荐

  1. mac中使用 sourcetree 的快速配置和git服务器登录

    问题: 1.mac中下载sourcetree配置仓库地址,一直在提示输入密码,无法登录成功,更无法获取源码. 2.找不到配置仓库时的账号密码,只看到地址. 场景: git服务器:自己的GIT服务器,非 ...

  2. Mac中为SourceTree设置代理登陆

    用git已经有一段时间了,但一直是使用命令来管理,有时候不是太方便,看到同事都在用SourceTree,也下载了一个想用用. 二话不说,上官网下载了一个最新版本的,当前版本是2.5(104).我用的是 ...

  3. 基于SourceTree 下的 Git Flow 模型

    基于SourceTree 下的 Git Flow 模型 1. sourceTree  是一个开源的git 图形管理工具,可下载mac版本,windows版本 2. Git Flow 是一套使用Git进 ...

  4. Git 在团队中的最佳实践--如何正确使用Git Flow

    我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...

  5. Mac中Git如何忽略.DS_Store文件

    Mac中Git如何忽略.DS_Store文件 作者:坚果 公众号:"大前端之旅" OpenHarmony布道师,InfoQ签约作者,CSDN博客专家,华为云享专家,阿里云专家博主, ...

  6. linux trac git,trac装配、配置、中文化、支持git(Linux,Mac)

    trac安装.配置.中文化.支持git(Linux,Mac) 我是用pip进行python包安装的! 整个过程还挺折腾,都怪文档有限,所以写下我的流程,给大家一个参考. 先确定版本 python 2. ...

  7. MAC 中Git 的使用

    MAC Pro中默认安装了GIT,我们可以在Mac的终端中直接使用GIT命令连接上GIT 服务器进行GIT的获取和提交工作,下文主要介绍几个常用的命令,以便收藏使用. 打开终端,导航到需要克隆的文件目 ...

  8. Git的使用——Git 常用命令总结、Git的使用、Git 的分支、远程仓库的使用、IDEA 中使用Git、Git 工作流(Git Flow、Github Flow、GitLab Flow)

    Git的使用--Git 常用命令总结.Git的使用.Git 的分支.远程仓库的使用.IDEA 中使用Git 一.Git 常用命令总结 为了方便后续查找命令,故先把总结放前面,教程放后面 1.git 基 ...

  9. Visual Studio中使用Git Flow

    在VS下使用 GitFlow管理项目开发 1.右键将你的解决方案添加到源代码管理,如果你的VS没有安装git,会提示安装,安装完成之后,在团队资源管理可以看到如下界面 (图一) 2.安装gitflow ...

最新文章

  1. js php base64,JavaScript实现Base64编码与解码的代码详解
  2. 你不知道的windows7 技巧大全【3】
  3. 深入浅出 Linux 惊群:现象、原因和解决方案
  4. js 动态创建注释节点 createComment
  5. 数论 —— 素性测试
  6. 基于DCT系数的实时监控中运动目标检测
  7. abb机器人指令手册_「ABB」ABB机器人指令模块介绍与开发过程
  8. mysql binlog解析 c_解析MYSQL BINLOG二进制格式(9)--infobin解析binlog帮助文档
  9. bfc是什么_清除浮动和 BFC
  10. OC----预处理器
  11. Intellij idea 插件 | 超越鼓励师 吐槽
  12. 计算机的神奇功能华为,接上线就变PC!华为Mate 10的电脑模式究竟好用不?
  13. 网络摄像机进行互联网视频直播录像方案的选择,EasyNVS or EasyCloud or EasyGBS?
  14. 现汇买入价/现钞买入价/卖出价/基准价/中行折算价的概念
  15. macbook蓝牙pan未连接_关于 MacBook 的电池问题,你了解多少
  16. 解决电脑桌面程序图标变白问题
  17. u盘安装计算机系统,最新U盘装系统教程,像安装软件一样简单,3分钟学会!
  18. 5G千兆工业路由器 poe供电
  19. 怎样度过研究生生活,如何度过研究生生活
  20. 人工智能-一种现代的方法-chapter3-通过搜索进行问题求解

热门文章

  1. html设置 字体样式 face
  2. vivo5.0以上机器最简单激活xposed框架的教程
  3. 分享几道VB.net笔试试题
  4. [ArcGIS]城市关联度分析
  5. 教你一招永不晕车,如果你或你身边朋友会晕车不妨点进来学学,很实用。
  6. 2013计算机应用基础试题及答案,2013年计算机应用基础试题及答案.doc
  7. Matlab R2016b安装教程
  8. 【5G入门】MCS调制编码方案简介
  9. 百度地图街景实现,看这篇就够了
  10. C++构造函数,析构函数