首页 > 资讯 > 科技 > 正文
2024-04-17 00:12

代码世界:分布式版本控制系统--git

码世界:分布式版本控制系统--git(一)git概述

Git是一个开源的分布式版本控制系统,可以有效、快速地处理大大小小的项目的版本管理。 它是Linus于2005年开发的一个开源版本控制系统,用于帮助Linux内核开发。

在此之前,从2002年到2005年,Linus决定使用Linux内核的主要版本控制系统来维护代码。 然而,在2005年,由于一些特殊原因,商业公司结束了与Linux内核开源社区的合作关系,并收回了其免费使用权,这意味着如果你想继续使用它,就必须付费。

支付? 这是不可能的。 这迫使Linux开源社区开发自己的分布式版本控制系统。 于是Linus决定开发自己的版本控制系统作为替代。 于是,在相对较短的时间内(有人说十天或一周),他写出了 Git 的第一个版本。 简直就是神!

以下是Linus对该版本控制系统的要求:

(If you're not distributed, then you're not worth using, it's as simple as that)
“如果你不是分布式的,那你就不值得使用,就这么简单”

(If you're poor performers, then you're not worth using, it's as simple as that)“
“如果你性能差,那你就不值得使用,就这么简单

(If you can't guarantee that what I put into the version control system will look exactly the same when I take it out, then you're not worth it)
“如果你不能保证我放进版本控制系统的东西在我拿出来的时候完全一摸一样,那你就不值得使用”

总结起来,Linus 对这个版本控制系统的要求是:

(2)Git工作流程

git的工作流程主要分为四个区域:工作区、暂存区、本地库、远程库

总结是:

下面是git工作的流程图。 每个过程都会涉及到一些git命令,后面我们会一步步分析:

(3)Git分支操作

在 git 中,分支是指向提交对象的可变指针,它代表项目历史记录中的独立行。 每个分支都有一个名称来标识和区分不同的开发线。

分支的主要作用是让我们能够在不干扰主线开发的情况下并行开发不同的功能或者修复不同的bug。 我们可以创建一个新分支来开发新功能。 然后在功能开发和测试之后,分支被合并回主线。

也就是说,我们可以从主分支上分支出来,比如需要修改bug的分支,或者需要添加某个功能的分支。 这些分支的发展不会影响主分支的运营。 某个分支开发完成后,将其添加到主分支中。

通常,在创建仓库的时候,git会默认帮我们创建一个main()分支。 我们将此分支称为主分支。 一般情况下,开发者是不允许直接在主分支上开发的,而是创建其他分支。 开发功能分支然后合并到主分支中。

下面介绍本地分支机构的常用操作:

(4)部署本地git并连接

首先我们需要在本地安装git版本控制软件。 这个我就不再解释了。 就去下一步吧。

然后右键项目目录,选择在此处打开Bit Bash,进入git命令行模式:

在此之前,我们需要打开Web界面,登录帐户,并在选项中选择SSH和GPG密钥。 它的作用是将你的公钥添加到服务器并通过ssh密钥实现身份验证:

接下来我们回到命令行界面,输入:ssh- -t rsa "" 获取shh密钥:

可以看到此时本地已经保存了两个文件,分别是ssh公钥和ssh私钥,并且给出了文件的存储路径。 下面解释一下ssh公钥和ssh私钥的作用:

输入ssh密钥的存储路径,打开ssh公钥文件:

然后复制整个内容并粘贴前面的公钥:

单击添加 SSH 密钥:

可以看到已经添加成功了。

回到git命令行验证是否认证通过,输入:ssh:

可以看到,输入yes后,返回我们已经成功通过验证了。 接下来我们就可以使用git与仓库进行交互了。

在以下位置创建新仓库:

复制 SSH 链接:

使用 git 中的 git clone 链接将存储库克隆到本地:

打开文件夹可以看到仓库文件:

设置用于标识当前提交的用户名和电子邮件地址:

这些信息对于 Git 来说不是必需的,但从团队协作的角度来看非常重要。 它们帮助团队成员识别每个提交的作者,并联系提交者进行进一步的沟通或询问。 同时,这些信息也是许多 Git 托管服务(如 Git 等)中建立用户帐户和提交之间的关联的基础。

本地新建一个文件,输入文件内容并保存:

使用git add文件名将其添加到暂存区,然后使用git“描述信息”将更改提交到本地仓库。 您可以稍后添加描述:

最后,使用 git push 命令将本地更改推送到远程存储库,使用: git push 分支名称:

查看该文件:

可以看到“text.txt”文件被推送到的远程仓库。 打开文件:

(5)深入理解git

介绍完git的一些基本概念和一些基本操作之后,我们现在开始对git进行更深入的学习。 我们主要研究以下两个方面:

git如何存储文件数据

Git的文件存储方式主要是基于对象数据库,它使用称为“对象”的基本单位来管理文件和版本之间的关系。

git中使用的对象主要有四种类型:Blob(二进制大对象)、Tree(树对象)、(提交对象)和Tag(标签对象)

为了方便查看,我们首先需要在资源管理的顶部显示隐藏文件:

然后我们初始化新的 git 存储库:

执行该命令后,我们会在当前文件夹中看到一个以.git结尾的隐藏文件:

这个文件包含了仓库所有必需的文件,比如对象数据库、引用、钩子等。我们在目录中看到的文件:

这里我们目前只需要关心目录,该目录当前包含两个文件:

接下来我们回到.git所在目录,在该目录下创建一个.txt文件:

在git命令行中,我们将文件提交到暂存区,观察目录变化:

发现这个目录下多了一个名为d3的文件夹,它是一种对象。 该文件夹中有一个加密乱码文件:

接下来我们执行命令提交文件并观察目录变化:

可以发现该目录中有两个目录对象0a和e9,它们也是以哈希值命名的。

上面生成的三个文件分别对应三个不同的对象:Blob对象、Tree对象、对象。 我们可以通过: git cat-file -t hash value 来判断它们属于哪种类型的对象:

根据我们前面介绍的对象以及这张图,我们可以很好的理解git的文件存储方式:

git分支的进一步研究

知道了git如何存储文件后,我们就到同目录下的refs目录,也就是index()。 该目录下有两个子目录,heads和tags:

目前我们只有一个分支, 分支:这里的哈希值指向我们的哈希值:

如果创建了名为 - 的分支,git 会在 refs/heads 目录下创建一个名为 - 的文件,并存储该分支的最新提交信息: