git简介
git是一个免费开源的分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容。
git内部原理
从根本上来讲 Git 是一个内容寻址(content-addressable)文件系统,并在此之上提供了一个版本控制系统的用户界面。 Git 的核心部分是一个简单的键值对数据库(key-value data store)。 你可以向 Git 仓库中插入任意类型的内容,它会返回一个唯一的键,通过该键可以在任意时刻再次取回该内容。
git对象
数据对象(blob object)
执行git add 文件名 后,.git\objects目录下生成一个子目录, 根据子目录名+目录下的文件名,可以定位到数据对象,该对象保存的就是文件内容。
子目录名+目录下的文件名:98715990d2f395dc2b34d82c8c571ca03f44ea0e
执行 git catp-file -t 98715990d2f395dc2b34d82c8c571ca03f44ea0e ,可以返回该文件的类型。
执行 git cat-file -p 98715990d2f395dc2b34d82c8c571ca03f44ea0e , 可以查看该文件内容。
树对象
如下图
树对象的结构对应了目录结构,包含目录跟文件, 一个树对象包含了一条或多条树对象记录。
用 git cat-file -p master^{tree} 可以查看分支上最新的提交所指向的树对象。
提交对象
执行git commit-m “描述信息” 后,.git\objects目录下生成一个子目录, 根据子目录名+目录下的文件名,可以定位到提交对象。
用 git cat-file -p 子目录名+目录下的文件名 查看提交对象内容
提交对象有固定的格式:
顶层树对象,代表当前项目快照;
父提交id;
作者/提交者信息;
空行;
提交注释;
git引用
HEAD引用
HEAD 文件通常是一个符号引用(symbolic reference),指向目前所在的分支。 所谓符号引用,表示它是一个指向其他引用的指针。
cat HEAD,查看HEAD文件,内容是指向当前分支。
远程引用
如果你添加了一个远程版本库并对其执行过推送操作,Git 会记录下最近一次推送操作时每一个分支所对应的值,并保存在 refs/remotes 目录下。
cat refs/remotes/origin/master, 查看远程引用