现在公司小伙伴大多数都在使用Git版本管理,很多人只会用它一些常用命令
git add
、git commit
、git push
等;
今天我们就来探秘下Git的运行原理;
Git
git 是分布式版本控制系统,相比较集中式版本控制系统(比如常用SVN),有着更大的优势, 不用担心服务器宕机,强大的分支管理,没有网络也可以继续工作提交;
-
git init
这个命令就是初始化一个文件夹,在这个文件夹内部生成一个.git
的文件夹
ls -al
total 0
drwxr-xr-x 3 xuzheng staff 96 10 20 15:16 .
drwx------@ 73 xuzheng staff 2336 10 20 15:16 ..
drwxr-xr-x 9 xuzheng staff 288 10 20 15:16 .git
ls .git
-rw-r--r-- 1 xuzheng staff 23B 10 20 15:16 HEAD
-rw-r--r-- 1 xuzheng staff 137B 10 20 15:16 config
-rw-r--r-- 1 xuzheng staff 73B 10 20 15:16 description
drwxr-xr-x 14 xuzheng staff 448B 10 20 15:16 hooks
drwxr-xr-x 3 xuzheng staff 96B 10 20 15:16 info
drwxr-xr-x 4 xuzheng staff 128B 10 20 15:16 objects
drwxr-xr-x 4 xuzheng staff 128B 10 20 15:16 refs
.git内部的一些文件夹
git 有三种存储文件类型
blob
、tree
、commit
还有一个tag
git中主要的对象类型
使用 git cat-file -t
查看对象类型
对象类型.png
git cat-file -p
查看对象内容
查看tree的内容
-
如果对象类型是
blob
,查看内容保存的是具体内容
blob类型 保存具体内容.png -
如果对象类型是
tree
, 内容保存的是blob
和tree
,具体记录了文件名和文件目录结构。
查看tree的内容.png -
如果对象类型是
commit
,内容保存的是tree
和提交者, 提交时间, 版本注释,版本序列的的记录。
commit内容.png
总结
不管是git还是SVN版本控制系统或者, 本质都是解决 对文件变更过程的存储
核心就是那款版本控制系统更友好、易学, 目前来说git是这样的。所以要了解下它的运行原理是更有必要的;
而Git的本质就是