基本git概念
git是对代码版本控制的工具,git维护两个数据结构对象库和索引。
1.对象库
git的对象库种有四种对象:
- blob 块对象:也是 binary large object 的缩写,一个文件对应一个快对象。在快对象中只存储文件的内容,而不存储文件的元数据如文件名和文件路径
- tree 树对象:树对象用来管理快对象,和文件的元数据。当然树对像也可以包含树对象。
- commit 提交对象:提交对象指向树对像,还包含了提交的作者和邮箱(这些在安装git时就设置了,存储在C盘种用户文件夹下的.gitconfig文件下),与提交的原因。
- tag 标签对象:标签对象指向一个提交对象,虽然每一个提交对象都会有一个SHA1值来指定如 a64837186d68e545ee5f96304 c816d93b276e643 但是没有标签 V1.0这样人性化。
只要是对象都可以通过git cat-file -p sha1值的前6位
查看该对象的内容
2. 索引
索引包含了一个版本的所有目录结构,比如在向git中添加一份文件后会形成一个块对象和新的索引,包含了该文件的元数据,增删改查文件是不会立即提交到git版本库中的,只是暂存起来,git也会在索引里面暂存这些变更。然后用索引可以创建树对像。查看当前索引下的文件可以通过git ls-files -s
命令。
3.案例
先在hello文件夹有文件hello.txt,初始化git,向git中添加hello.txt文件,然后通过索引创建树对象git write-tree
。
-hello
hello.txt
然后将hello.txt复制一份到subdir文件夹下,将复制的hello.txt添加到git中,在通过索引创建树对像,提交新的树对像git commit-tree sha1值的前6位
创建提交对象。
-hello
hello.txt
-subdir
hello.txt
通过git tag -m "标签信息" 标签名 sha1值的前6位
创建一个标签对象指向提交对象。
过程如图所示
最后对象的关系为:
blob对象
树对象
提交对象
标签对象
使用git tag -m "标签信息" V1.0 sha1值的前6位
生成标签对象后可以使用git rev-parse V1.0
查看标签对象的SHA1值,然后
git cat-file -p 8c7012
查看对象内容。
4.总结
git init --初始化git
git add ./文件名 --添加文件
git write-tree --创建树对象
git commit-tree sha1前6位 --创建提交对象
git commit -m "提交原因" --前两个的功能
git tag -m "提交信息" 标签名 需要指向的提交对象的sha1值前6位 --创建标签对象
git ls-files -s --显示索引的所有文件
git cat-file -p sha1前6位 --查看对象的组成
git rev-parse sha1的前6位/标签名 --查看对象完整的sha1值