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