• git目录结构


    TOC

    git目录

    新建一个git项目,查看.git目录

    .git/
    ├── branches
    ├── config
    ├── description
    ├── HEAD
    ├── hooks
    │   ├── applypatch-msg.sample
    │   ├── commit-msg.sample
    │   ├── fsmonitor-watchman.sample
    │   ├── post-update.sample
    │   ├── pre-applypatch.sample
    │   ├── pre-commit.sample
    │   ├── prepare-commit-msg.sample
    │   ├── pre-push.sample
    │   ├── pre-rebase.sample
    │   ├── pre-receive.sample
    │   └── update.sample
    ├── info
    │   └── exclude
    ├── objects
    │   ├── info
    │   └── pack
    └── refs
        ├── heads
        └── tags
    
    
    9 directories, 15 files

    objects

    我的理解是,项目中你看到的每个东西都是一个object,实际上object有:commit、tree、blob、tag(加tag的时候才会有)

    • 添加一个文件
    echo 111 > a.txt
    # 此时看git目录没有任何变化
    git add .
    # 此时看git 目录可以看到多了objects下多了一个目录,运行以下命令:
    git cat-file -p 58c9  #xxxx是遗传16进制的值,由目录名和里面的文件名组成
    # 输出 111
    git cat-file -t 58c9  #可以看到当前objects的类型,此时是blob
    # 通过上述的操作,可以知道,blob是一个只包含文件内容的object
    
    
    # 接下来执行commit操作,此时会发现objects目录下多了两个文件,我们一个一个查看
    git cat-file -p 9759 #
    
    # 内容是tree f253233a1a0e59f33115daca3fa494eaa20758d8,还有一些其他信息
    # 我们可以看到f253233a1a0e59f33115daca3fa494eaa20758d8也是objects中的一个对象,接着看看它,其实已经可以判断它是一个tree类型
    git cat-file -t 9759 #类型是commit
    
    git cat-file -p f253 #内容 100644 blob 58c9bdf9d017fcd178dc8c073cbfcbb7ff240d6c    a.txt
    git cat-file -t f253  #类型tree
    

    通过以上的信息,实际上一次commit是构建了一棵树。
    以上:
    9759->f253->58c9 || commit->tree->blob

    如果修改a.txt的内容,可以看到会生成新的objects,并且有一个新的blob完全包含了新的a.txt的全部内容,这意味着,git是保存文件的完全的副本,而不是差异。同时会有新的commit object 和 新的tree object。实践吧!
    添加了b.txt的objects tree

    ├── objects
    │   ├── 4c
    │   │   └── aaa1a9ae0b274fba9e3675f9ef071616e5b209
    │   ├── 58
    │   │   └── c9bdf9d017fcd178dc8c073cbfcbb7ff240d6c
    │   ├── 97
    │   │   └── 590a17d455bf791b68561588bddae174d125d1
    │   ├── c2
    │   │   └── 00906efd24ec5e783bee7f23b5d7c941b0c12c
    │   ├── d6
    │   │   └── 43f2709193bf972c2d01a0119934e8789ec915
    │   ├── f2
    │   │   └── 53233a1a0e59f33115daca3fa494eaa20758d8
    │   ├── info
    │   └── pack
    # d643是新的commit,可以看它的内容,会多了一个parent 97590a17d455bf791b68561588bddae174d125d1
    # parent 把新的commit和过去的commit连接起来了!

    可以试着reset一下,会发现其实所有的objects都还在的,只是改变了HEAD等指针;

    git的所有内容都是实例和指向它的指针。

    logs





    分享自由,尊重著作权
  • 相关阅读:
    C计算double能精确到多少位
    C计算int最大值、最小值
    AndroidStudio右键new无activity
    java替换特殊字符串 $
    lamda表达式排序
    docker toolbox 设置镜像加速
    tomcat优化
    nginx配置相关
    SQL 优化
    elasticsearch 概念初识
  • 原文地址:https://www.cnblogs.com/jerry323/p/12727826.html
Copyright © 2020-2023  润新知