git学习(一)

一、代码仓库的初始化

1、先在本地操作,不涉及到远程服务器,创建目录mkdir git demo

想要本地创建的目录成为一个远程仓库就需要初始化git init

git init 后会发生什么?

2、watch -n 1 -d tind每隔1s打印当前文件目录并且刷新

左边命令

watch -n 1 -d tind每隔1s打印当前文件目录并且刷新

在这里插入图片描述

3、代码仓库的初始化git init

git init

在这里插入图片描述

ls -a会看到.git目录

在这里插入图片描述

.git目录下会有右边的文件

在这里插入图片描述

方便看将sample文件删掉
在这里插入图片描述

在这里插入图片描述

4、 cat .git/config 代码仓库的配置文件(实际是当前代码仓库的本地的配置文件)

在这里插入图片描述

5、 git全局的配置文件 (当前用户目录下的cat ~/.gitconfig)

在这里插入图片描述

6、 git config --global -l 打印全局global的配置

在这里插入图片描述

实际上我们是需要配置本地local的配置文件
git config user.name ”demo”
git config user.email ”demo@com”

cat .git/config查看配置信息就会有刚才配置的username信息,代码仓库就会优先使用当前local本地的配置用户、eamil信息,会用到commit时提交信息
在这里插入图片描述
git config -l 将配置列出

在这里插入图片描述

若将刚才本地配置的username信息删掉,会使用全局配置(git config --global -l)的email信息
在这里插入图片描述
全局配置只有一个文件,当前用户目录下的全局配置cat ~/.gitconfig
在这里插入图片描述
若不在本地代码仓库配置user的信息,就会使用全局的代码仓库配置,假设进行提交,有两个用户,需要进行用户切换,显然需要本地配置一个用户覆盖全局配置,再去提交就会显示本地的用户信息,这样就有多少个用户就可以在代码仓库内部去配置本地的信息,相互之间不会冲突。

二、git addb背后到底发生了什么?

初始化一个空的代码仓库,会有一个.git文件夹产生

1、有代码仓库后就需要往代码仓库写文本文件

echo "hello.git" >hello.txt

在这里插入图片描述

敲回车后.git文件里面一点变化都没有?为什么?
因为在代码仓库做的修改默认是放在工作区,工作区的内容不会归git进行管理,但是能识别出在工作区做的修改

2、git status 能识别出在工作区做的修改,能识别出Untacked的hello.txt文件

git status 能识别出Untacked的hello.txt文件

在这里插入图片描述

git为什么能识别出来,后面再进行解释

3、有这个文件后,但是想要git帮我们进行管理

3.1 方便看出有多少个目录,用 tree./git

方便看出有多少个目录,用 tree./git

可看出9个目录,4个文件
在这里插入图片描述

3.2通过git add helloWorld.txt 将它添加到缓存区中

在这里插入图片描述

多了object下的8d (0e41234f24b6da002d962a26c2495ea16a425f)以及index

在这里插入图片描述

3.3git objects对象(主要有blob、commit object、tree object、tag

1)git cat-file可以查看这些object文件。第一可以查看这种object到底是什么object,第二可以查看object的内容

object下的8d (0e41234f24b6da002d962a26c2495ea16a425f)这个称长的字符为hash的算法–SHA1

这种算法可以将文件的内容\字符串加密字符

2)git cat-file -t 8d041可以查看某个具体的git objects对象的类型

返回blob,这个git object类型是blob
blob在 git object中是用来存储文件内容

>这种算法可以将文件的内容\字符串加密字符

4)git cat-file -p 8d041可以查看某个git objects对象的内容

返回hello.git
在这里插入图片描述

通过git add可以将文件添加到缓存区,实际就会生成一些objects对象

5)git objects看到的是文件的内容,是否存储文件名?(实际不存储)

演示为什么不存储文件名:

再创建一个大小、内容、名字不同的文件tmp

在这里插入图片描述

通过git add tmp.txt右边目录没有任何变化

在这里插入图片描述

git object的哈希值不仅存储文件的内容,还存储对象object的类型

以上就可以证明git object blob只存储的是文件内容,不存储文件名,那文件名存储在哪儿呢?

3.4有了hello.txt怎么生成一个hash值呢?(固定算法)

演示
此处有一个python文件(是可以进行算出hash值)
即就会返回hash值,左边的hash值和右边的hash值完全一样
在这里插入图片描述
tmp.txt、hello.txt文件的hash值完全一样
在这里插入图片描述

3.5文件名存储在什么地方?

git object的哈希值不仅存储文件的内容,还存储对象object的类型,不存储文件名,那文件名存储在哪儿呢?
用 git status 查看状态,发现变成绿色,文件可以进行提交
在这里插入图片描述
git可以发现哪些文件是git add在缓存区中,哪些还在工作区中
在这里插入图片描述

4、git cat-file -s 8d041可以查看某个git objects对象的长度

在这里插入图片描述

三、blob对象和SHA1哈希(还没太看明白)

git add发生了什么?介绍了 git object的第一种blob,文件名是一个hash值
先了解一下算法
在这里插入图片描述

hash算法一般用在密码上面,实际md5和SHA1已经不太安全了
md5现在一般是去验证文件的完整性。

SHA1现在是在git领域使用

docker的image和contain id都是256的哈希算法

在这里插入图片描述

文件名是hash值

文件到底放了什么?
看文件的内容

在这里插入图片描述

出现了乱码,实际上git会把这个文件的原始内容做压缩,然后再存储到右边的 object中

在这里插入图片描述
在这里插入图片描述

原始的文件可根据ls -lh可以看到大小10B
在这里插入图片描述
进到 cd .git/objects/8d查看大小是26B,比原先大,是因为做了压缩,会存储压缩的信息,这个文件比较小,若去创建一个大一点的文本文件,再去生成object,他的这个object的大小就会小于原始的文件,是去做了一些压缩。

在这里插入图片描述

四、工作区和索引区(笔记后面没更新)

在这里插入图片描述

1、working dirctory

在这里插入图片描述

在当前的工作区创建文件或者修改文件---->通过git add命令将文件从工作区添加到索引区\缓存区(通过git add这个命令生成了对应的blob和object,通过blob object 学习,发现blob的object里并没有存储文件名的信息,只有关于对象的类型、对象的内容、对象的大小,文件名的信息在哪儿?文件名的信息在index中,在后面git repository会记录这个问题?)

2 、stageing area(缓存区、索引区)

stageing area(缓存区、索引区)是连接工作区和代码仓库,为了代码仓库做准备。
index保存了当前待提交(待commit到repository)的状态,状态就包括了文件(文件夹、目录以及每个文件所对应的什么状态,具体内容是什么)

working dirctory\stageing area里面的文件信息是有差别,这个差别在使用git status时就可以显示。

在当前阶段关于文件的信息都是在index中

2.1 echo “file1” >file1.txt && git add file1.txt

通过git add命令将文件从工作区添加到索引区\缓存区(通过git add这个命令生成了对应的blob和object,并且同时生成一个文件index

在这里插入图片描述

2.2、tree .git/

在这里插入图片描述

在这里插入图片描述

2.3、cat .git/index

可以看到index有乱码,可以大致看到文件名file1.txt
在这里插入图片描述

2.4、git ls-files查看index,可以显示当前在索引区位置的文件

在这里插入图片描述

2.5、git ls-files -s查看index,可以显示当前在索引区位置的文件名、文件信息

在这里插入图片描述

10064数字代表文件的权限,普通文件
e2129701f1a4d54dc44f03c93bca0a2aec7c5449这个代表的是文件对应的blob对象

即就是file1当前文件的内容查看blob对象(e2129701f1a4d54dc44f03c93bca0a2aec7c5449)就ok

file1.txt这个文件已经添加到索引区,这个文件在工作区和索引区的状态是一致的,通过 git status查看文件在索引区中并且是可以进行提交到代码仓库中了

在这里插入图片描述

3 、git repository

五、git commit背后到底发生了什么?

工作区(创建修改的文件)与索引区文件同步: git add
索引区是记录了当前文件的状态、包括记录了是哪些文件、文件具体的内容是什么?

如何将index(当前的文件信息)同步到远程代码仓库中?

1、准备工作

在这里插入图片描述

在这里插入图片描述

1)左边是有两个文件file1.txt,file2.txt,并且显示文件内容

2)右边是实时监控当前文件目录:每隔1s刷新文件目录

3)通过git cat-file -p ca5a 可以看到这两个文件所对应的blob对象所对应的内容,和当前在工作区中的文件内容也完全是一样的

4)通过git ls-files -s 看索引区,这两个文件的索引所对应的blob对象也是明确的
5)通过git status 看索引区和工作区的状态也是同步的

2.git commit -m "message"git commit 将index(当前的文件信息)同步到远程代码仓库中

2.1没敲完回车

在这里插入图片描述

右边目前是有三个git objects,下面是当前index所指向的file1和file2所对应的blob对象
e2129是之前的对象,这个对象可以认定是垃圾对象,目前是中间状态,是file1和file2的中间状态

在这里插入图片描述

2.2敲完回车

在这里插入图片描述

先看左边,有简单输出,
master表示在当前分支。
(root-commit) dbde7c SHA1这个hash值代表的是一次commit
root commit,第一条commit
2 files changed,2 insertions(+) 代表commit做的事情,2个文件改变,并且有两行变化。
create mode 100644 file1.txt create mode 100644 file2.txt 代表创建了10064这两个普通文件

右边最主要的是object对象
有5个object对象

已知有一个d0bde,他是一个commit git对象,这是git object中的第二种: git commint object

在这里插入图片描述

2.3通过 git cat-file -t d0bde7c可以查看git commit的类型

在这里插入图片描述

2.4通过 git cat-file -p d0bde7c可以查看git commit的内容

1)commit对象的内容

在这里插入图片描述

commit对象包含内容:
包含tree的对象,tree是git object对象的第三种内容
tree 29d3f358addb2b6e16ebfb981716fa75cc562ee7,tree后面跟的sha1的哈希值就是tree对象的文件名
author Peng Xiao xiaoquwl@gmail.com 1590009304 +0200committer Peng Xiao xiaoquwl@gmail.com 1590009304 +0200 表示本次commit的作者信息(名字、email、时间戳等)

2)tree对象

tree对象就包括了这次提交的版本、文件的状态下有哪几个文件、每个文件的文件名、每个文件名所对应的blob对象是什么

tree 29d3f358addb2b6e16ebfb981716fa75cc562ee7
tree 29d3正好是本次commit生成的第二个对象

在这里插入图片描述

① git cat-file -p d0bde7c可以查看的类型

在这里插入图片描述

② git cat-file -p d0bde7c可以查看的内容

在这里插入图片描述

内容是有两个文件,正好就说明tree代表的是目录结构

3)其他变化

git commit除了生成两个objects (commit、tree对象),还有其他的变化等

在这里插入图片描述

用tree可以查看其他变化
refs也有变化

在这里插入图片描述

① cat .git/refs/heads/master可以看到master的内容,指向d0bde

d0bde是commit对象,说明当前master分支最新的分支是d0bde
commit实际是有head
在这里插入图片描述

② cat .git/HEAD查看commit HEAD文件

HEAD文件可以理解为指针
HEAD永远指向当前的工作分支,当前的工作分支是master,即HEAD会指向master
在这里插入图片描述

若创建一个分支,并且切换到新分支上,head也会指向新分支

这个refs/heads/master是会指向一次具体的commit

3、总结

总结一下现在代码仓库的状态和涉及的git 对象
在这里插入图片描述
最上面是commit commit包含了指向具体的哪一个tree、关于作者的基本信息

tree也是对象,包含了哪些文件,一个是file1,一个是file2,这两个文件有具体的blob对象,查看各自的blob对象,都会获取到文件的内容

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

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

相关文章

搞DDR,你是可以看看我的这篇笔记(三)

关于DDR PHY这个部分,是数模混合器件,工作涉及到了很多信号完整性,眼图,模拟等相关的东西我就没讲了。因为确实不太熟悉,只能站在架构、功能、使用上去聊聊。 上一篇我们看了这个图片,简化就是下面这个样子: 其实这个也不太合适~~~ 这样舒服多了,一般DDRC和DDRPHTY都会…

被工信部认可的开源软件治理解决方案

近日,工信部网络安全产业发展中心正式发布了“2023年信息技术应用创新解决方案”,开源网安凭借“基于SCA技术开源软件治理解决方案”顺利入选,成为经工信部认可的优秀解决方案,这是开源网安连续两届荣获此荣誉。 工业和信息化部网…

17.延迟队列

介绍 延迟队列,队列内部是有序的,延迟队列中的元素是希望在指定时间到了以后或之前取出和处理。 死信队列中,消息TTL过期的情况其实就是延迟队列。 使用场景 1.订单在十分钟内未支付则自动取消。 2.新创建的店铺,如果十天内没…

【Redis系列】RedisTemplate的使用与注意事项

目录 一.什么是RedisTemplate 二.如何使用RedisTemplate RedisTemplate的API 序列化 三.StringRedisTemplate 一.什么是RedisTemplate RedisTemplate 是一个工具类,由 Spring 官方提供的方便操作 Redis 数据库的一个工具类,来源于 org.springframe…

【LLM】-10-部署llama-3-chinese-8b-instruct-v3 大模型

目录 1、模型下载 2、下载项目代码 3、启动模型 4、模型调用 4.1、completion接口 4.2、聊天(chat completion) 4.3、多轮对话 4.4、文本嵌入向量 5、Java代码实现调用 由于在【LLM】-09-搭建问答系统-对输入Prompt检查-CSDN博客 关于提示词注入…

涉密移动载体智能柜管控系统DW-S404|国产自主可控

东识移动载体管控系统载体柜系统采用RFID识别技术,结合智能载体管理软件,实现了文件载体权限管理、定位管理、智能存取、智能盘点、在线监控等功能,同时对文件载体进行规范化、智能化、自动化管理。工作人员通过授权进行文件、载体、卷宗等存…

C# 简单的单元测试

文章目录 前言参考文档新建控制台项目新建测试项目添加引用添加测试方法测试结果(有错误)测试结果,通过正规的方法抛出异常 总结 前言 听说复杂的项目最好都要单元测试一下。我这里也试试单元测试这个功能。到时候调试起来也方便。 参考文档 C# 单元测试&#xf…

这一文,关于 Java 泛型的点点滴滴 一(泛型基础、类型擦除)

作为一个 Java 程序员&#xff0c;用到泛型最多的&#xff0c;我估计应该就是这一行代码&#xff1a; List<String> list new ArrayList<>();这也是所有 Java 程序员的泛型之路开始的地方啊。 不过本文讲泛型&#xff0c;先不从这里开始讲&#xff0c;而是再往前…

富唯智能转运机器人:高效、智能、未来的选择

在现代工业中&#xff0c;高效的物流和物料处理是提升生产效率的关键。富唯智能转运机器人&#xff0c;以其卓越的技术和智能化的设计&#xff0c;为各行业提供了完美的解决方案。 产品概述 富唯智能转运机器人搭载ICD系列核心控制器&#xff0c;拥有多种移载平台&#xff0c…

dpdk编译安装以及接收udp报文(基于ubuntu)

目录 1、编译 2、设置运行环境 3、使用dpdk接收udp报文 3.1、设置发送端arp信息 3.2、测试 3.3、代码 4、其他 1、编译 代码下载&#xff1a; DPDK 下载版本&#xff1a;DPDK 19.08.2 export RTE_SDK/root/dpdk-stable-19.08.2/ export RTE_TARGETx86_64-native-li…

Python 教程(五):理解条件语句和循环结构

目录 专栏列表前言条件语句if 语句elif 语句else 语句示例 循环结构for 循环while 循环break 和 continue实例演示 循环控制语句range 函数enumerate 函数 模式匹配总结 在前四篇教程中&#xff0c;我们学习了 Python 的基本语法和数据结构。本篇教程&#xff0c;我们将深入探讨…

lua 游戏架构 之 游戏 AI (八)ai_tbl 行为和优先级

定义一系列的AI行为类型和它们的优先级&#xff0c;以及一个映射表ai_tbl来关联每种AI行为类型与对应的脚本文件和优先级。以下是对代码的详细解释&#xff1a; lua 游戏架构 之 游戏 AI &#xff08;一&#xff09;ai_base-CSDN博客https://blog.csdn.net/heyuchang666/artic…

【ACM独立出版,高录用】第四届物联网与机器学习国际学术会议(IoTML 2024,8月23-25)

2024年第四届物联网与机器学习国际学术会议&#xff08;IoTML 2024&#xff09;将于2024年8月23-25日在中国南昌召开。 会议将围绕着物联网和机器学习开展&#xff0c;探讨本领域发展所面临的关键性挑战问题和研究方向&#xff0c;以期推动该领域理论、技术在高校和企业的发展和…

【全国大学生电子设计竞赛】2022年A题

&#x1f970;&#x1f970;全国大学生电子设计大赛学习资料专栏已开启&#xff0c;限时免费&#xff0c;速速收藏~

信息收集总结

关注内容 1. 企业股权架构&#xff1a;了解公司的股权结构&#xff0c;确定控股子公司&#xff0c;收集边缘业务系统资产。 2. 网站备案&#xff1a;获取公司的备案信息&#xff0c;包括根域名及其子域名。 3. 对外发布的产品&#xff1a;收集公司公开发布的产品信息&…

剑指Meta?1230 亿参数,Mistral 发布 Large 2 旗舰 AI 模型

7 月 25 日消息&#xff0c;AI 竞赛日益激烈&#xff0c;Meta 公司昨日推出开源 Llama 3.1 模型之后&#xff0c;法国人工智能初创公司 Mistral 也加入了竞争行列&#xff0c;在今日凌晨推出了新一代旗舰模型 Mistral Large 2。 Mistral AI 发布 Mistral Large 2&#xff0c;1…

[算法题]添加字符

题目链接: 添加字符 因为数据量很小, 所以直接两层遍历暴力求解, 依次将字符串 A 与字符串 B 相同位进行比对, 每轮记录当前轮次不相等的位数是几位, 并与历史上记录的比较取小值, 图示: 经过比较后, 题解就为 1, 空白处不用管, 因为题意是可以在开头和末尾添加字符的, 添加与…

c生万物系列(加减乘除模篇)

为了提高c语言的运行效率&#xff0c;我们需要采用更高效的运算&#xff0c;那么切入点就是随处可见的基本运算符合&#xff0c;从底层架构考虑&#xff0c;加减乘除的效率比位运算低很多&#xff0c;为了能够更好迎合CPU的二进制&#xff0c;有必要取代基本的加减乘除以及求余…

【“微软蓝屏”事件暴露了网络安全哪些问题?】建设安全稳固的网络基础设施

目录 前言一、软件更新流程中的风险管理和质量控制机制&#xff08;一&#xff09;测试流程及风险识别&#xff08;二&#xff09;风险管理策略&#xff08;三&#xff09;质量控制措施 二、预防类似大规模故障的最佳方案或应急响应对策&#xff08;一&#xff09;冗余系统设计…

2024最火的知识付费系统小程序+PC+H5三端数据互通支持采集资源开源版

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 系统含带 裂变模式 可以助力好友来获取资源共享 分站功能 独立后台 会员功能 卡密功能 二级分销功能等 自行研究看 后期有更新新版会在持续发布 目前版本是3.5 是我花三天时间修复的 …