Git 通用命令-.git文件学习(一)
在使用Git的时候,我们会经常看到一个
.git
文件.点开后,会发现这里面有很多文件.如果你也有疑问?.这些文件都是啥.那就继续往下看吧.我这里以我的理解,简单分享一下
由于.git
文件内容还是比较多的,这里会把.git文件讲解
分解成两篇文章来讲解一下.
.git文件结构讲解
.git文件内容讲解
简单梳理一下
创建到添加过程中
.git
文件内容变化.好了,废话不多说,上技师.
您能在这里看到啥
- Git流程示意图
.git
文件结构git add
文件变动
Git流程示意图
.git
文件结构
- 创建Git仓库
- 创建文件夹
mkdir test_git
- 进入
test_git
文件cd test_git
- 创建Git仓库
git init
通过上面的两步,我们的git本地仓库(Git Repository)就创建完成了.在
test_git
文件夹下,我们会看到今天的主角.git
文件夹,由于.git
文件是以.
开头的,所以它为隐藏文件夹,一般我们是看不到.Mac电脑可以使用以下命令来打开显示以隐藏文件功能.
打开隐藏文件
defaults write com.apple.finder AppleShowAllFiles -bool true ; killall Finder
关闭显示 隐藏文件
defaults write com.apple.finder AppleShowAllFiles FALSE ; killall Finder
哈哈,没想到吧,我还把打开和关闭的指令也给你了吧,没办法,咱就是给的多.👇我们看一下
.git
文件结构.
- 查看初始
.git
文件结构
查看文件结构有两种方式:
ls
指令ls -F1 .git
tree
指令tree -L2 .git
这里,使用tree
指令来看一下.git
文件结构.如下所示
然后,我们简单的看一下这几个文件,都是啥子意思
- HEAD: 此文件当前位置指针,并指向当前分支.
- config: 存放当前git配置项.
- description: 当前git仓库名称及描述.
- hooks: 存放
git hooks
,用于在git
命令前后检查或者做一些自定义动作. - info: 暂不做详细讲解,理解和
.gitignore
功能差不多 - objects: 文件和目录真实存储文件夹
- refs: 存储分支(branch)和标签(tag)
git add
后文件变动
-
创建
touch test.txt
上面提示我们,工作区存在未跟踪的文件
test.txt
.此时我们查看.git
文件,其实是啥都没有变化的. -
执行
git hash-object test.txt
命令.- 通过上面的命令,我们可以得到
test.txt
文件的散列值. 762c983e33c2968ef90e5504c584a47f54a5c9c8
- 通过上面的命令,我们可以得到
-
执行
git add
命令.该命令可以将未追踪的文件转换为已追踪状态.并且会把要添加的每个文件内容复制到对象库中,并按照文件的散列值进行文件索引.
-
执行
git ls-files --stage
查看暂存区中的文件.并显示对应的文件散列值 通过上面显示的信息.我们能得到4列信息:-
100644
代表文件的权限信息,100644代表可读写.
-
762c983e33c2968ef90e5504c584a47f54a5c9c8
代表指向的blob对象的索引.并且git也是通过散列值索引值,找到真实的内容.
-
0
不确定
-
test.txt
对应的文件名
-
-
查看
.git
文件结构,如下图所示 从上面的树形图中,我们不难发现.在刚初始化的git仓库的时候,objects文件结构如下所示 但,当我们执行git add 命令后,我们看一下objects文件结构如下所示 通过对比,我们发现objects下的76索引目录再拼接上下面的2c98...,和通过git ls-files --stage
获取暂存区中blob对象. -
通过
git cat-file -p
来找到真正的内容 从上面的图片中,我们看到命令行输出的内容是初始化
.我们再来看一下test.txt
这样我们就知道
git add
是通过文件的散列值
通过git
索引机制,把真实的内容关联起来了.通过上面的学习,我们知道当使用
git add
命令时,索引会发生更新.这就是为啥,我们每次在git commit
的时候,要先执行git add
命令用最新版本的文件来更新索引.否则将会得到两个不同版本的文件,如果你忽略了git add
文件提醒,那么你在git commit
的时候,新编辑的文件索引,就不会更新到objects
里.这样就容易出现文件丢失.切记,在
git commit
的时候,一定要执行git add
指令.
至此.git add
文件变动分享完成
系列文章
Git 通用命令-.git文件学习(二)
文章内容预告
将会包含以下或者更多内容
-
git commit
文件变动 -
git remote add origin -url
文件变动
转载自:https://juejin.cn/post/7168775267459006501