字节跳动 Git 的正确使用姿势与最佳实践

版本控制Git 黑马&尚硅谷

Git的前世今生

方向介绍

为什么要学习Git

1.0 Git是什么

1.1 版本控制

1.1.1 本地版本控制

1.1.2 集中版本控制

1.1.3 分布式版本控制

我们已经把三个不同的版本控制系统介绍完了,Git 作为分布式版本控制工具

虽然目前来讲是最先进使用最广的,但是其实在最开始,他也不是第一个出现的分布式版本控制软件,

接下来我们就介绍一下 Git 的发展历史,以及现在市面上基于 Git 演进的各种平台

1.2 Git发展历史

由于 bitkeeper 不是开源的,所以一开始其实 linux 团队的人就很排斥使用该软件

BitKeeper 是一个专有软件,由于 Linux 项目的一个开发人员,写了一个工具 去连接 BitKeeper, 因此被怀疑是对 Bitkeeper 做了逆向工程

因此这个公司就不允许 Linux 团队继续使用;有兴趣的可以可以自己去看 Git 的最早的代码历史

随着 Git 的发展,基于 Git 也衍生出了很多平台 除此之外,还有 BitBucket, Coding, 码云,阿里云效平台等等,每个平台都有自己的使用场景和优势, 我们选择最合适自己的平台即可

2.0 Git基本使用方式

在这一节中,我们会演示很多基本的 Git 命令,我们会在操作过程中通过 Git 仓库目录的变化来讲述 Git 的原理,在这个过程中,希望同学们能够跟随我来一起完成这些 Git 操作,通过这个实际操作的过程更深刻的去理解这些命令

常见问题

1.没配置 权限秘钥

2.1 Git 目录介绍

tree .git /F 查看文件 type

HEAD 表示当前指向的分支;config 当前仓库的配置;hooks 配置hook

Object 存储文件信息; refs 存储分支信息;

改代码新建文件 都是在工作区; Git add 加到暂存区;最后commit提交

重点关心一下这个 git 目录,因为我们后续每一个 git 操作都会映射到这个 git 目录之中,通过这里面的文件我们可以映射出所有版本的代码

2.1.1 Git Config

git 配置到底是个什么东西呢,我们又可以配置哪些内容呢,我们一起来了解一下 Git 配置这个概念

local 存在当前.git目录下的config文件; system系统文件配置存在/etc/gitconfig;全局global 存 在当前用户的.gitconfig下

级别:system > global > local

2.1.2 常见 git配置

2.2 Git Remote

Remote: 本地仓库与远端的关联信息

一个仓库拥有多个 remote, 从没有写权限的仓库 fetch 代码,push 到自己有权限的仓库

2.2.1 HTTP Remote

我们知道了什么是 remote 配置后,那我们本地是如何与 remote 进行通信的呢,

一般会通过 http 和 ssh 两种协议,这两种协议都需要对身份进行认证,

类似 go 这种语言,依赖库很多,所以我们需要不断的输入认证的账号密码,肯定是一件很麻烦的事情,因此我们需要配置一下免密的认证方式

一般情况,不推荐从HTTP访问Git,不那么安全,方便

2.2.2 SSH Remote

配置公司钥 还是拉取不下来代码问题 可能原因之一:

存在一种新版本 Windows代码不允许 使用dsa和rsa的key;在SSH层面拒绝访问

2.3 Git Add

(再次强调观察文件变化)了解好基本的 Git 配置后,我们会重点关注一下 Git 命令的原理,接下来我们一起来进行代码的编写和提交,在这个过程中,我们会更深入的去观察 git 目录下的内容变化,来理解我们执行的 git 命令到底做了什么,git 又是如何把代码通过版本管理起来的

2.4 Git Commit

2.5 Object

2.6 Refs

除了 objects 文件有变化,我们发现 refs 的文件内容也有变化

git checkout -b test #切换到新分支

2.7 附注标签

2.8 追溯历史版本

2.9 修改历史版本

2.10 Objects

2.11 Git GC

不设置为过期的话 在日志里面 还能看到 老的commit引用 ,就不能通过GC真实地删掉他

2.12 完整的 Git视图

将 Git 完整的视图描述一遍,重新强调 git 是怎么存储代码历史的。讲完了 Git 本地的存储方式,

引出多人合作和远端仓库同步的概念,从而进入到 Git Clone Pull Fetch 的内容

2.13 Git Clone&Pull&Fetch

2.14 Push 将本地代码 同步至远端

开篇 问题解答

3.0 Git研发流程

常见问题

3.1 不同的工作流

3.2 集中式工作流

3.2.1 集中式工作流-Gerrit

3.3 分支管理工作流

3.3.1 分支管理工作流 Git Flow

3.3.2 分支管理工作流 Github Flow

Branch protection rule

1、必须和request merge 才能提交;1.1、必须有其它人同意才能提交

2、check;3、讨论都被解决了才能提交;4、线性历史(阻止merge节点的产生);

Include Adamin...5、保护 对admin也生效(admin 不能为所欲为)

3.3.3 分支管理工作流 Gitlab Flow

总结这几个工作流的共性是都需要通过 git merge 来合入代码,从而引出介绍代码合并的方式

3.4 代码合并

3.5 如何选择合适的工作流

我们刚刚介绍了不同的工作流方式,以及他们的合入原理,其中有集中式工作流,和分支管理工作流,分支管理又分成典型的 GitFlow, Gitlab Flow, Github Flow

我们有这么多工作流可以选择,那我们又该如何去选择合适的工作流呢。

常见问题答案

总结课程内容

Git 是一个分布式版本控制工具,由 linus 开发,衍生出 github gitlab gerrit 等平台

Git 配置,Git 代码提交,Git 代码同步基本命令,以及 git 管理代码的原理,帮助我们更好的知道如何正确使用 Git 命令

讲述不同的研发流程,有以 gerrit 为代表的集中式工作流,和 gitlab/github 为代表的分支管理工作流,讲述了一些代码提交规范,保护分支,codereview 等概念,帮助我们规范研发流程

希望同学们能够从这节课程中学习到如何使用 Git,以及如何规范我们的研发流程,从而来提升我们的开发效率,以及提升我们的代码质量

非常感谢您阅读到这里,创作不易!如果这篇文章对您有帮助,希望能留下您的点赞👍 关注💖 收藏 💕评论💬感谢支持!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/52164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django(4)-Django 管理页面

创建一个管理员账号 python manage.py createsuperuser运行项目,访问http://127.0.0.1:8080/admin,可以看到管理员界面 管理页面加上投票应用 polls/admin.py from django.contrib import admin# Register your models here. from .models import …

自动化测试之Junit

Junit引入注解参数化单参数多参数方法传参 测试用例执行顺序断言测试套件 Junit引入 Junit来编写和组织自动化测试用例,使用Selenium来实际模拟用户与Web应用程序的交互。也就是使用JUnit的测试功能来管理和运行Selenium测试。常见的做法是,使用JUnit作…

【Vue框架】基本的login登录

前言 最近事情比较多,只能抽时间看了,放几天就把之前弄的都忘了,现在只挑着核心的部分看。现在铺垫了这么久,终于可以看前端最基本的登录了😂。 1、views\login\index.vue 由于代码比较长,这里将vue和js…

一个简单的web应用程序的创建

一个简单的web应用程序的创建 1、数据库设计与创建1.1、数据库系统1.2、Navicat Premium1.3、Power Designer 2、使用maven创建SpringBoot项目2.1、配置maven2.2、安装idea2.3、使用idea创建maven项目2.4、根据需要配置pom.xml文件、配置项目启动相关的文件2.5、写SpringBoot项…

Unity——DOTween插件使用方法简介

缓动动画既是一种编程技术,也是一种动画的设计思路。从设计角度来看,可以有以下描述 事先设计很多基本的动画样式,如移动、缩放、旋转、变色和弹跳等。但这些动画都以抽象方式表示,一般封装为程序函数动画的参数可以在使用时指定&…

目标检测笔记(十一):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)

文章目录 背景代码结果 背景 由于我们在做项目的时候可能会涉及到某个指定区域进行目标检测或者人脸识别等任务,所以这篇博客是为了探究如何在传统目标检测的基础上来结合特定区域进行检测,以OpenCV自带的包为例。 一般来说有两种方式实现区域指定&…

【动手学深度学习】--20.目标检测和边界框

文章目录 目标检测和边界框1.目标检测2.边界框 目标检测和边界框 学习视频:物体检测和数据集【动手学深度学习v2】 官方笔记:目标检测和边界框 在图像分类任务中,我们假设图像中只有一个主要物体对象,我们只关注如何识别其类别…

docker在阿里云上的镜像仓库管理

目录 一.登录进入阿里云网站,点击个人实例进行创建 二.创建仓库,填写相关信息 三.在访问凭证中设置固定密码用于登录,登录时用户名是使用你注册阿里云的账号名称,密码使用设置的固定密码 四.为镜像打标签并推送到仓库 五.拉取…

互联网医院成品功能你有哪些看法?

随着信息化的飞速发展,医疗领域信息化程度日益加深,医院对于信息化的自身需求越来越高,由此也推动了医院信息化的快速发展。而即时医疗信息服务能够解决普通老百姓医疗信息匮乏、花大钱看小病、就医不及时等基本问题。通过智能手机、平板电脑…

jdk 04 stream的collect方法

01.收集(collect) collect,收集,可以说是内容最繁多、功能最丰富的部分了。 从字面上去理解,就是把一个流收集起来,最终可以是收集成一个值也可以收集成一个新的集合。 collect主要依赖java.util.stream.Collectors类内置的静态方…

七大出海赛道解读,亚马逊云科技为行业客户量身打造解决方案

伴随全球化带来的新机遇和国内市场的进一步趋于饱和,近几年,中国企业出海快速升温,成为了新的创业风口和企业的第二增长曲线。从范围上看,出海市场由近及远,逐步扩张。从传统的东南亚市场,到成熟的北美、欧…

丰田中国vs中国丰田:一次历史性的战略探讨

比亚迪、长城、奇瑞等中国汽车品牌表现优异,让原本处于领先地位的日系、美系、德系等合资品牌面临压力,市场份额遭受前所未有的全新挑战。 东风雷诺、广汽菲克、广汽讴歌等逐渐退出中国市场,丰田也面临销售下滑。在中国汽车市场全新竞争格局下…

Qt跨平台无边框窗口探索记录

一、前言 实现的效果为:通过黑色矩形框预操作,鼠标释放时更新窗口。效果图如下: 1.功能 1.1 已实现功能 8个方向的缩放标题栏拖动标题栏双击最大化/正常窗口窗口最小尺寸预操作框颜色与背景色互补多屏幕默认标题栏 1.2 待开发功能 拖动到…

SQL-Injection

文章目录 引入columns表tables表schemata表以sqli-labs靶场为例路径获取常见方法文件读取函数文件写入函数防注入 数字型注入(post)字符型注入(get)搜索型注入xx型注入 引入 在MYSQL5.0以上版本中,mysql存在一个自带数据库名为information_schema,它是一个存储记录…

YOLOV1

YOU ONLY LOOK ONCE

学习ts(六)数据类型(元组、枚举、Symbol、never)与类型推论

1.元组 元组(Tuple)是固定数量的不同类型的元素的组合。是数组的变种。 元组与集合的不同之处在于,元组中的元素类型可以是不同的,而且数量固定。元组的好处在于可以把多个元素作为一个单元传递。如果一个方法需要返回多个值&…

生成式人工智能的潜在有害影响与未来之路(三)

产品责任法的潜在适用 背景和风险 产品责任是整个二十世纪发展起来的一个法律领域,旨在应对大规模生产的产品可能对社会造成的伤害。这一法律领域侧重于三个主要危害:设计缺陷的产品、制造缺陷的产品和营销缺陷的产品。产品责任法的特点有两个要素&…

R包开发1:RStudio 与 GitHub建立连接

目录 1.安装Git 2-配置Git(只需配置一次) 3-用SSH连接GitHub(只需配置一次) 4-创建Github远程仓库 5-克隆仓库到本地 目标:创建的R包,包含Git版本控制,并且能在远程Github仓库同步,相当于发布在Github。…

C语言练习2(巩固提升)

C语言练习2 选择题 前言 “志之所趋,无远弗届,穷山距海,不能限也。”对想做爱做的事要敢试敢为,努力从无到有、从小到大,把理想变为现实。要敢于做先锋,而不做过客、当看客,让创新成为青春远航的…

图为科技-边缘计算在智慧医疗领域的作用

边缘计算在智慧医疗领域的作用 随着科技的进步,智慧医疗已成为医疗行业的重要发展趋势。边缘计算作为新兴技术,在智慧医疗领域发挥着越来越重要的作用。本文将介绍边缘计算在智慧医疗领域的应用及其优势,并探讨未来发展方向。 一、边缘计算…