Git 通用命令-.git文件学习(一)

2,906 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

在使用Git的时候,我们会经常看到一个.git 文件.点开后,会发现这里面有很多文件.如果你也有疑问?.这些文件都是.那就继续往下看吧.我这里以我的理解,简单分享一下

由于.git文件内容还是比较多的,这里会把.git文件讲解分解成两篇文章来讲解一下.

  1. .git文件结构讲解
  2. .git文件内容讲解

简单梳理一下

创建添加过程中 .git文件内容变化.好了,废话不多说,上技师.

您能在这里看到啥

  1. Git流程示意图
  2. .git文件结构
  3. git add文件变动

Git流程示意图

v2-468760f57d75b51ad696d1a2cd42ec57_720w.webp

.git文件结构

  1. 创建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文件结构.

  1. 查看初始.git文件结构

查看文件结构有两种方式:

  • ls指令
    • ls -F1 .git
  • tree指令
    • tree -L2 .git

这里,使用tree指令来看一下.git文件结构.如下所示 截屏2022-11-21 17.32.56.png 然后,我们简单的看一下这几个文件,都是啥子意思

  • HEAD: 此文件当前位置指针,并指向当前分支.
  • config: 存放当前git配置项.
  • description: 当前git仓库名称及描述.
  • hooks: 存放git hooks,用于在git命令前后检查或者做一些自定义动作.
  • info: 暂不做详细讲解,理解和.gitignore功能差不多
  • objects: 文件和目录真实存储文件夹
  • refs: 存储分支(branch)和标签(tag)

git add 后文件变动

  1. 创建touch test.txt 截屏2022-11-22 15.25.21.png

    上面提示我们,工作区存在未跟踪的文件test.txt.此时我们查看.git文件,其实是啥都没有变化的.

  2. 执行git hash-object test.txt命令.

    • 通过上面的命令,我们可以得到test.txt文件的散列值.
    • 762c983e33c2968ef90e5504c584a47f54a5c9c8
  3. 执行git add命令.

    该命令可以将未追踪的文件转换为已追踪状态.并且会把要添加的每个文件内容复制到对象库中,并按照文件的散列值进行文件索引.

  4. 执行git ls-files --stage查看暂存区中的文件.并显示对应的文件散列值 截屏2022-11-22 15.06.29.png 通过上面显示的信息.我们能得到4列信息:

    • 100644

      代表文件的权限信息,100644代表可读写.

    • 762c983e33c2968ef90e5504c584a47f54a5c9c8

      代表指向的blob对象的索引.并且git也是通过散列值索引值,找到真实的内容.

    • 0

      不确定

    • test.txt

      对应的文件名

  5. 查看.git文件结构,如下图所示 截屏2022-11-21 18.30.03.png 从上面的树形图中,我们不难发现.在刚初始化的git仓库的时候,objects文件结构如下所示 截屏2022-11-22 10.18.48.png 但,当我们执行git add 命令后,我们看一下objects文件结构如下所示 截屏2022-11-22 10.18.41.png 通过对比,我们发现objects下的76索引目录再拼接上下面的2c98...,和通过git ls-files --stage获取暂存区中blob对象.

  6. 通过git cat-file -p来找到真正的内容
    截屏2022-11-22 17.21.52.png 从上面的图片中,我们看到命令行输出的内容是初始化.我们再来看一下test.txt 截屏2022-11-22 17.23.45.png

    这样我们就知道git add是通过文件的散列值通过git索引机制,把真实的内容关联起来了.

    通过上面的学习,我们知道当使用git add命令时,索引会发生更新.这就是为啥,我们每次在git commit的时候,要先执行git add命令用最新版本的文件来更新索引.否则将会得到两个不同版本的文件,如果你忽略了git add文件提醒,那么你在git commit的时候,新编辑的文件索引,就不会更新到objects里.这样就容易出现文件丢失.

    切记,在git commit的时候,一定要执行git add指令.

至此.git add文件变动分享完成

系列文章

Git 通用命令-.git文件学习(二)

文章内容预告

将会包含以下或者更多内容

  1. git commit文件变动

  2. git remote add origin -url文件变动