开启成长之旅!这是我参与「日新计划 12 月更文挑战」的第1天,点击检查活动概况

在运用Git的时分,咱们会经常看到一个.git 文件.点开后,会发现这儿面有许多文件.假如你也有疑问?.这些文件都是.那就继续往下看吧.我这儿以我的了解,简略共享一下

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

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

简略整理一下

创立增加过程中 .git文件内容改变.好了,废话不多说,上技师.

您能在这儿看到啥

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

Git流程示意图

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

.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文件结构.如下所示

Git 通用命令-.git文件学习(一)
然后,咱们简略的看一下这几个文件,都是啥子意思

  • HEAD: 此文件当时方位指针,并指向当时分支.
  • config: 存放当时git配置项.
  • description: 当时git库房名称及描绘.
  • hooks: 存放git hooks,用于在git指令前后检查或许做一些自定义动作.
  • info: 暂不做具体解说,了解和.gitignore功能差不多
  • objects: 文件和目录实在存储文件夹
  • refs: 存储分支(branch)和标签(tag)

git add 后文件变化

  1. 创立touch test.txt

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

    上面提示咱们,作业区存在未盯梢的文件test.txt.此刻咱们检查.git文件,其实是啥都没有改变的.

  2. 履行git hash-object test.txt指令.

    • 经过上面的指令,咱们能够得到test.txt文件的散列值.
    • 762c983e33c2968ef90e5504c584a47f54a5c9c8
  3. 履行git add指令.

    该指令能够将未追踪的文件转换为已追踪状态.而且会把要增加的每个文件内容复制到目标库中,并按照文件的散列值进行文件索引.

  4. 履行git ls-files --stage检查暂存区中的文件.并显现对应的文件散列值

    Git 通用命令-.git文件学习(一)
    经过上面显现的信息.咱们能得到4列信息:

    • 100644
      代表文件的权限信息,100644代表可读写.
    • 762c983e33c2968ef90e5504c584a47f54a5c9c8
      代表指向的blob目标的索引.而且git也是经过散列值索引值,找到实在的内容.
    • 0
      不确定
    • test.txt
      对应的文件名
  5. 检查.git文件结构,如下图所示

    Git 通用命令-.git文件学习(一)
    从上面的树形图中,咱们不难发现.在刚初始化git库房的时分,objects文件结构如下所示
    Git 通用命令-.git文件学习(一)
    但,当咱们履行git add 指令后,咱们看一下objects文件结构如下所示
    Git 通用命令-.git文件学习(一)
    经过比照,咱们发现objects下的76索引目录再拼接上下面的2c98…,和经过git ls-files --stage获取暂存区中blob目标.

  6. 经过git cat-file -p来找到真实的内容

    Git 通用命令-.git文件学习(一)
    从上面的图片中,咱们看到指令行输出的内容是初始化.咱们再来看一下test.txt
    Git 通用命令-.git文件学习(一)

    这样咱们就知道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文件变化