小白一枚。学习笔记。仅供参考。欢迎指错。
二、基本的Git概念
Git版本库不仅保存库中所有文件的完整副本,而且保存版本库本身的副本。
Git维护的两个主要的数据结构 对象库(object store) 索引(index)
Git的对象类型
①块(blob)
binary large object的缩写,即二进制大对象。一个blob保存一个文件的数据,但不包含这个文件的元数据,设置连文件名都没有。
②目录树(tree)
一个目录树对象代表一层目录信息。它记录blob标识符 路径名 和在一个目录里的所有文件的一些元数据。
③提交(commit)
一个提交对象保存着版本库中的每一次变化的元数据,包括作者/提交者/提交日期和日志消息。每一个提交对象指向一个目录树对象。
④标签(tag)
索引
临时的、动态的二进制文件,它描述的是版本库的目录结构。更准确地说,索引捕获项目在某个时刻的整体结构的一个版本。项目的状态可以用一个提交和一棵目录树表示。
Git追踪的是内容,基于数据的散列值而不是文件名或者目录名。
底层的实现
mkdir jerry
cd jerry
git init
find .git/objects
echo “zxq” >> zxq
git add zxq
find .git/objects
git cat-file -p 98e7483d #查看对象id的内容
git rev-parse 98e7483d #查看完整的对象id
当使用git add后,Git会给添加的每个文件的内容创建一个对象,但不会立刻为树创建一个对象,却会立刻更新索引。 .git/index
git ls-files -s
git write-tree #捕获索引状态保存到数对象
git cat-file -p b9a79fd #查看树的内容
pwd
mkdir subdir
cp zxq subdir
git add subdir/zxq
git write-tree #捕获索引的状态保存到树对象
echo -n “commit a file” | git commit-tree 38946d
git status #发现未提交。??
git tag -m “Tag version 1.0” V1.0 3ed454d
git rev-parse V1.0