git原理:从根本上来讲 Git 是一个内容寻址(content-addressable)文件系统,并在此之上提供了一个版本控制系统的用户界面。
1.内容寻址文件系统层
2.传输机制和版本库管理任务
“底层(plumbing)”命令&&“高层(porcelain)”命令
- git init
当在一个新目录或已有目录执行 git init 时,Git 会创建一个 .git 目录。 这个目录包含了几乎所有 Git 存储和操作的东西。 如若想备份或复制一个版本库,只需把这个目录拷贝至另一处即可。
默认生成:
HEAD
config*
description
hooks/
info/
objects/
refs/
---git内部对象三种:数据对象、树对象、提交对象
blob-object底层模式
git hash-object -w file //输入文件,返回40位hash值
git cat-file -p hashkey //输入hash值,返回文件内容
tree-object树对象模型(解决文件名保存问题)
git update-index --cacheinfo 文件模式
文件SHA-1值 文件名 // 在index中建立新的缓冲区,用于存储文件对象
git update-index --add 文件名//添加文件对象到缓冲区
git write-tree//将缓存区写为树对象,返回sha-1值
commit-object 提交对象
git commit-tree 对象sha-1值//输入提交提示,返回提交对象的sha-1值
git log 对象sha-1值//--stat将更详细
------------将对象的sha-1值引用(别名)
git update-ref refs/heads/master sha-1值
【当运行类似于 git branch (branchname) 这样的命令时,Git 实际上会运行 update-ref 命令,取得当前所在分支最新提交对应的 SHA-1 值,并将其加入你想要创建的任何新引用中。】
---tag object标签对象
git update-ref refs/tags/v1.0 sha-1值
---打包
git gc//【能差异化存储,减少尺寸,一般最新的版本存储完整文件,老版本存储差异】