GitLab安装与git原理深入理解(二)

(一)GIT原理深入理解(二)

接回上篇说到commit对象,就等于我们提交的所有文件
git 中最重要的三个对象
1、Blob 对象
存储的是文件内容,压缩的
存储文件名字是根据内容算出的一个hash值
2、tree对象
存储blob对象
子tree对象
3、commit对象
存储作者提交者注释
指向一个 tree 的指针
到那么就构成了我们提交的文件所有描述,所以commit对象,就等于我们提交的所有文件
式例:首次提交,提交一个简单的文件 a.txt ,commit 之后的图如下(上一篇重点说了这里
在这里插入图片描述
如图所示,生成了 3 个对象,一个 commit 对象,一个 tree 对象,一个 blob 对象。图上蓝底是 commit 对象,灰底的是 tree 对象,白底的是 blob 对象,每个对象节点的标题是对象的 key (SHA 摘要)缩略表示。 对于 commit 对象,tree 内容表示这个 commit 对应根目录的 tree 对象,parent 表示父 commit 节点,通常commit 只有一个父节点,也可能没有(首次提交时 parent 为空),也可能有多个(合并节点),commit 对象还保存了 commit message 等信息。 对于 tree 对象,里面的内容包含了文件名,文件对应的 blob 对象的 key,或者是目录名和目录对应 tree 对象的 key。 对于 blob 对象,表示一个实际文件对象的内容,但不包括文件名,文件名是在 tree 对象里存的。

通过 git log 命令获取最新 commit 的 key

通过 git cat-file -p 获取 key 对应 object 的内容,根据 object 里的内容,继续探索,就可以访问到所有关联 object.所以commit对象,就等于我们提交的所有文件
接下来我们先思考几个问题:
1:git是怎么知道我们当前是哪个分支?
2:它怎么知道我们当前是哪个commit?
第一个问题很简单:
A:如图所示在.git文件中有个heads文件夹。里面管理了我们本地当前的所有分支信息
在这里插入图片描述
B:.git文件夹中还有一个HEAD文件,指向我们当前的分支。。切换分支,git只需要改变这个文件的指针就好了。而SVN要复制整个文件内容。
在这里插入图片描述
在这里插入图片描述
第二个问题,它是怎么知道我们当前是哪个提交版本的?
如图所示:在heads文件夹master文件中就存储着,我们当前提交的指针ID,如果再次提交。就只需要改变master文件中的ID就好了在这里插入图片描述

小结:

在这里插入图片描述
那么问题来了。HEAD 为什么要通过 refs/heads/master 中转一下,而不是直接指向 master 分支的提交?
先思考一下:

每个分支的头指针都指向该分支的最新提交
但是此时如果出现一个 dev3 分支,刚从 master 检出,头指针和 master 相同,HEAD直接指向提交的话,怎么知道,当前工作分支是 master 还是 dev3 呢对吧?

HEAD 可以直接指向提交吗?
答案是可以的:但是会进入一种特殊的状态 detached HEAD。
detached HEAD,游离的 HEAD 指针。
使用 git checkout 成功的进入了
detached HEAD 状态:
得出结论,当 HEAD 指针直接指向提交时,就会导致 detached HEAD 状态。在这个状态下,如果创建了新提交,新提交不属于任何分支。相对应的,现存的所有分支也不会受 detached HEAD 状态提交的影响
在这里插入图片描述
用途:
排查问题的时候,checkout 到怀疑的 commit 点上去做些测试,detached HEAD会保护你的现有分支不受影响,测试完了不想保存直接 checkout 到其他地方,可以放弃修改。想保存修改,可以创建一个 git checkout -b 新分支保存

二:GitLab安装以及汉化

我用的centos-7,可以先上一下官网https://about.gitlab.com/install/#centos-7 下载相应的安装包。
官网也有相应的教程,先执行这些命令。配置一些环境,关闭防火墙,开启HTTPS之类的
在这里插入图片描述
后面还有一些命令,配置邮箱(可以直接跳过)。然后怎么安装,但是注意官方推荐的这种安装非常非常慢。。可能要几个小时,可以选择社区版本安装https://gitlab.com/larryli/gitlab下载对应的社区版本,上传到服务器
在这里插入图片描述
1、执行 rpm -ivh gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm
2、sudo gitlab-ctl reconfigure 时间很长8-10分钟
3、 gitlab-ctl start 启动gitlab
4、访问gitlab http://ip:port
5、初始用户root 自行设置密码
二、获取gitlab汉化包(要部署非汉化版,可以跳过这一块内容)

说明:gitlab中文社区版的项目,v7-v8.8是由Larry Li发起的“GitLab 中文社区版项目”(https://gitlab.com/larryli/gitlab),从 v8.9 之后,@xhang 开始继续该汉化项目(https://gitlab.com/xhang/gitlab)
停止gitlab服务
1、sudo gitlab-ctl stop
下载汉化版本(可以跟上你的版本号)
2、git clone https://gitlab.com/xhang/gitlab.git -b v10.8.2-zh
比较汉化版本和安装版本,导出 patch 用的 diff 文件
git diff v10.8.2 v10.8.2-zh > …/10.8.2-zh.diff
diff文件作为补丁更新到gitlab中
sudo yum install patch -y
sudo patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < 10.8.2-zh.diff
重新加载配置
sudo gitlab-ctl reconfigure
启动gitlab
sudo gitlab-ctl start
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值