Git 的正确使用姿势与最佳实践01 | 青训营

127 阅读4分钟

Git的前世今生

方向介绍

image-20230529105830109

为什么要学习Git

image-20230529110031344

image-20230529110022731

1.0Git是什么

1.1 版本控制

image-20230529110202141

image-20230529110751536

1.1.1 本地版本控制

image-20230529110347586

1.1.2 集中版本控制

image-20230529110451820

1.1.3 分布式版本控制

我们已经把三个不同的版本控制系统介绍完了,Git 作为分布式版本控制工具, 虽然目前来讲是最先进使用最广的,但是其实在最开始,他也不是第一个出现的分布式版本控制软件, 接下来我们就介绍一下 Git 的发展历史,以及现在市面上基于 Git 演进的各种平台

image-20230529110625196

1.2 Git发展历史

由于 bitkeeper 不是开源的,所以一开始其实 linux 团队的人就很排斥使用该软件 BitKeeper 是一个专有软件,由于 Linux 项目的一个开发人员,写了一个工具 去连接 BitKeeper, 因此被怀疑是对 Bitkeeper 做了逆向工程, 因此这个公司就不允许 Linux 团队继续使用;有兴趣的可以可以自己去看 Git 的最早的代码历史

image-20230529110718485

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

image-20230529110734911

2.0 Git基本使用方式

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

image-20230529112403833

常见问题

image-20230529112344615

1.没配置 权限秘钥;

2.1 Git 目录介绍

image-20230529112633598

image-20230529112438458

tree .git /F 查看文件 type

HEAD 表示当前指向的分支;config 当前仓库的配置;hooks 配置hook Object 存储文件信息; refs 存储分支信息;

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

image-20230529113021311

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

2.1.1 Git Config

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

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

级别:system > global > local

image-20230529113626017

2.1.2 常见 git配置

image-20230529113809409

2.2 Git Remote

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

image-20230529114146854

image-20230529114643729

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

2.2.1 HTTP Remote

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

一般会通过 http 和 ssh 两种协议,这两种协议都需要对身份进行认证, 类似 go 这种语言,依赖库很多,所以我们需要不断的输入认证的账号密码,肯定是一件很麻烦的事情,因此我们需要配置一下免密的认证方式

image-20230529114827216

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

2.2.2 SSH Remote

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

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

image-20230529115354077

image-20230529115630969

2.3 Git Add

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

image-20230529120029652

2.4 Git Commit

image-20230529120712961

2.5 Object

image-20230529115749619

image-20230529120810013

image-20230529120824679

2.6 Refs

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

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

image-20230529131234944

image-20230529132101712

2.7 附注标签

image-20230529132127530

2.8 追溯历史版本

image-20230529132754873

2.9 修改历史版本

image-20230529132925244

image-20230529133048117

2.10 Objects

image-20230529133304819

2.11 Git GC

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

image-20230529133710257

2.12 完整的 Git视图

将 Git 完整的视图描述一遍,重新强调 git 是怎么存储代码历史的。讲完了 Git 本地的存储方式, 引出多人合作和远端仓库同步的概念,从而进入到 Git Clone Pull Fetch 的内容

2.13 Git Clone&Pull&Fetch

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

image-20230529134611289

开篇 问题解答

image-20230529134631620