Git的工作流有哪些

发布时间:2023-03-29 15:07:43 作者:iii
来源:亿速云 阅读:136

本篇内容主要讲解“Git的工作流有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Git的工作流有哪些”吧!

在讲 Git Flow 之前,我们先讲讲别的东西

Git 基础知识

工作区(Workspace)、暂存区(Index)、版本库(Repository)

# 创建并进入 testGitFlow 目录
# 此时 testGitFlow 就是我们的工作区(Workspace),也就是工作目录

$ mkdir testGitFlow && cd testGitFlow

# 初始化 git 仓库
# 此时目录中增加了 .git 目录,.git 目录就是 git 仓库,不属于工作区

$ git init

# 新增两个文件
$ echo 111 > a.txt
$ echo 222 > b.txt

# 添加两个文件到暂存区/索引(Index)
$ git add .

# 把索引中的两个文件添加到版本库(Repository)
$ git commit -m 'init'

以上涉及的几个概念:
Workspace: 简单理解就是我们的项目目录
Index: 简单理解就是存储即将提交的内容的区域
Repository: 版本仓库

Commit、Tree、Blob 对象

# 通过 git log 查看版本
$ git log

>
commit 2b304a56998989dbcfd77f370f4b43fcad9e5872 (HEAD -> master)
Author: huihuipan <huihuipan163@163.com>
Date:   Mon Feb 27 17:56:53 2023 +0800

    init


# 通过 git cat-file 查看 commit 信息

# 查看 commit 类型
$ git cat-file -t 2b304a
> commit

# 查看 commit 内容
$ git cat-file -p 10d717

>
tree 4caaa1a9ae0b274fba9e3675f9ef071616e5b209
author huihuipan <huihuipan163@163.com> 1677491813 +0800
committer huihuipan <huihuipan163@163.com> 1677491813 +0800

init

# 可以发现有 tree, author, committer 等信息
# 继续查看 tree 内容
$ git cat-file -t 4caaa1
> tree

$ git cat-file -p 4caaa1
>
100644 blob 58c9bdf9d017fcd178dc8c073cbfcbb7ff240d6c	a.txt
100644 blob c200906efd24ec5e783bee7f23b5d7c941b0c12c	b.txt

# 可以发现有 blob 信息
# 继续查看 blob 内容
$ git cat-file -t 58c9bd 
> blob

$ git cat-file -p 58c9bd 
> 111

# 可以看到里面存储的是 a.txt 的内容

以上涉及的几个概念:
commit: commit 记录提交的版本
tree: tree 记录不同版本下的目录结构和文件名
blob: blob 记录文件内容

修改文件及提交 commit 的时发生了什么?

  1. 首先,a.txt 内容 从 111 修改为 333,此时 git 仓库没有变化,只是工作区和索引的内容对不上了;

  2. 执行 git add 命令

    1. git 仓库根据新的 a.txt 内容(333)创建出一个新的 blob 结点,记录 a.txt 内容

    2. 索引从旧 blob 的指向新的 blob

  3. 执行 git commit 命令

    1. 根据索引的状态,生成 tree 对象

    2. 根据新生成的 tree 对象和 上一个 commit 对象,生成新的 commit 对象

    3. 把分支指针从旧的 commit 对象移动到新的 commit 对象

HEAD、Branch、Tag

Branch: 是指向 Commit 的指针,每一次提交新的commit,当前的 Branch 都会指向最新的 commit;

HEAD: 指向 Branch 的指针,当checkout 到非 branch 时,会提示处于分离头指针状态,可以做一些试验性的动作;

Tag: 指向 Commit 的指针,用作标签,通常用作记录固定版本,也可以理解为是指定 commit 的别名;

以上我们可以得知,git 的版本管理粒度去到了文件级别,blob 之间的对比即可得到 diff,这里也引申出了一个开发上的一个思考,当我们的程序设计的基础是一个比较小粒度的时候,后续开发和扩展就会更加灵活,事实上git 对commit 的操作也是非常灵活,灵活到稍不注意就有可能酿成事故。

Checkout、Merge、Rebase、Fetch、Pull

checkout 检出: 把 HEAD 检出到指定 branch 或 commit,或者检出指定版本指定文件的内容,由于在 git 里面checkout 承载了太多的功能,所有切换分支有专属命令 switch

merge 合并:

rebase 变基:

rebase 会修改版本历史,即使 rebase 前与 rebase 后的内容一致,但版本不再是同一个版本

fetch: 从另一个存储库下载对象和引用,如远程库

pull: git pull = fetch + merge

基于 Git 的几种工作流

Git Flow

简介

主要分支

有两个分支会贯穿整个版本的生命周期,也就是长期分支:

支撑分支

开发需求时从 develop 分支拉出 feature 分支,feature 分支开发完毕后(开发自测无问题)则合并回 develop 分支,合并后删除分支,后续出现 bug 则在 develop 分支修改。

当 develop 分支处于一个相对稳定的状态时即可从 develop 分支拉出 release 分支准备发布,release 分支不进行功能开发,仅进行 bug 修复,直至无问题时合并到 master 分支进行发布,同时合并回 develop 分支后删除 release 分支。

hotfix 分支用于修复生产环境上急需修复的 bug, 当生产环境出现 bug 时,从 master 分支拉出 hotfix 分支,修复后合并回 master 分支进行发布,同时合并到 develop 分支后删除。

补充

2020年 Vincent Driessen 补充了一条反思笔记,大概说 Git Flow这种模式在持续交付的软件下显得复杂,可以考虑使用 Github Flow 而不是将 Git Flow 硬塞到项目中。

Git Flow 之后 Adam Ruka 针对 Git Flow 的技术细节做了优化,提出了 One Flow

Github Flow

相对于 Git FlowGithub Flow 只有一条主干分支,通过 github 平台加持增加 PR 流程: 进行某功能开发时,从 master 分支拉出 feature 分支,完成功能后提交 pr, 让相关人员进行 review, review 期间仍可以对 feature 进行提交,直至确认无问题后通过 pr, 可以把 feature 分支合并到 master 分支进行发布

GitLab Flow

GitLab Flow 使用 master 分支作为开发分支,基于 master 分支另起发布分支 production
GitLab Flow 增加以下分支定义:
环境分支:当你需要在不同环境发布不同的版本时使用
发布分支:当项目需要发布不同的版本时使用,声明了一个发布分支后,这个分支只会合并严重的漏洞修复更新。

持续发布

gitlab-flow 推荐使用 master 分支进行开发,基于 master 分支另建 production 分支进行发布,另外提出了 环境分支的概念,根据不同环境,逐层合并,最后汇总到 production 发布分支后进行发布

版本发布

如果你的项目需要发布不同的版本, gitlab-flow 版本发布模式可能更适合,在持续发布模式下,不同的版本会有不同的发布分支进行发布。

Aone Flow

Aone-flow 是以 master 分支为基础,除 master 分支外其他都是临时分支。基于 master 分支拉出环境分支,环境分支之间不进行任何关联,独立发展,环境分支也不允许直接修改,而是通过合并不同的 feature 分支进行组合。 feature 分支直至合并到 发布分支后才会删除。有点是操作粒度更高更可控,缺点是环境分支的内容即使是一样的,但版本历史却有可能不一致。

怎样选择版本控制

上面介绍了好几种 flow, 从 gitflow 开始,gitflow 让自由度超高的 git 得到了指导性的使用方式;
而 github-flow 又针对了 gitflow 的复杂性提出了极简版的 flow;
gitlab-flow 又针对 gitflow 和 github-flow 过于复杂或过于简单的方式,提出了自己折中的方案,同时还给出了两种交付方式(持续交付、版本交付)的方案;
最后也介绍了 AoneFlow,一种操作粒度更自由的方案。

其实没有一种万能方案,不同的团队/项目有着其特殊的情况,针对不同情况,flow 也在变化,合适的就是最好的。

到此,相信大家对“Git的工作流有哪些”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. Java工作流系统-驰骋BPM工作流 引擎的工作模式
  2. git克隆yii的安装方法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

git

上一篇:php把时间转成时间戳的代码怎么写

下一篇:git常见命令有哪些及怎么使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》