Git背后的object

本文介绍了Git版本库的核心——对象库,包括对象的四种类型:块(blob)、目录树(tree)、提交(commit)和标签(tag)。通过实例解析了Git如何保存文件版本、元数据以及它们之间的关系,展示了Git如何构建和管理项目的修订版本历史。
摘要由CSDN通过智能技术生成

Git是一个版本库,它用来维护与管理项目的修订版本和历史信息。

有时候我会觉得Git像是一个时光机,它能带我穿越时空回到过去,并且改写历史,但Git的功能又不仅仅如此,它可以让你在多个空间来回穿梭,甚至可以合并两个空间。我一直觉得学习一个新的事物,首先要学习它的基础和思想,这样自己才不至于会迷失。所以在我们能穿越时空之前,有些基础但却非常东西是需要学习的,要不然就会出现像至尊宝一样的状况,拿着月光宝盒念着波若波若蜜但却无法随心所欲穿越时空。

Git维护两个主要的数据结构:对象库(object store)和索引(index)。所有这些版本库数据存放在工作目录下一个名为.git的隐藏子目录中。

首先,让我们看看一个刚init的repo里.git目录中都有些什么吧。

.git git:(master) find .
.
./branches
./config
./description
./HEAD
./hooks
./hooks/applypatch-msg.sample
./hooks/commit-msg.sample
./hooks/post-update.sample
./hooks/pre-applypatch.sample
./hooks/pre-commit.sample
./hooks/pre-push.sample
./hooks/pre-rebase.sample
./hooks/prepare-commit-msg.sample
./hooks/update.sample
./info
./info/exclude
./objects
./objects/info
./objects/pack
./refs
./refs/heads
./refs/tags

里面的目录都是用来干吗的我们先不用管,需要先注意的是这个objects目录。我们再添加一个event.txt看看之后这个目录会发生什么变化。

➜  meet-you git:(master) echo "meet xiaoxing 2015.10.5" >> event.txt
➜  meet-you git:(master) ✗ git add event.txt.git git:(master) find .
.
./branches
./config
./description
./HEAD
./hooks
./hooks/applypatch-msg.sample
./hooks/commit-msg.sample
./hooks/post-update.sample
./hooks/pre-applypatch.sample
./hooks/pre-commit.sample
./hooks/pre-push.sample
./hooks/pre-rebase.sample
./hooks/prepare-commit-msg.sample
./hooks/update.sample
./index
./info
./info/exclude
./objects
./objects/e4
./objects/e4/51e1f97987612782f91943c770272eb031e64c
./objects/info
./objects/pack
./refs
./refs/heads
./refs/tags

我想你已经看到了objects目录下多了些什么。那么我们再把这个event.txt提交后再看看有什么变化。

➜  meet-you git:(master) ✗ git commit -m "add event about first time meet you".git git:(master) find .
.
./branches
./COMMIT_EDITMSG
./config
./description
./HEAD
./hooks
./hooks/applypatch-msg.sample
./hooks/commit-msg.sample
./hooks/post-update.sample
./hooks/pre-applypatch.sample
./hooks/pre-commit.sample
./hooks/pre-push.sample
./hooks/pre-rebase.sample
./hooks/prepare-commit-msg.sample
./hooks/update.sample
./index
./info
./info/exclude
./logs
./logs/HEAD
./logs/refs
./logs/refs/heads
./logs/refs/heads/master
./objects
./objects/8e
./objects/8e/8c172536c06aad3df1f3f1636e83145cb809f0
./objects/e4
./objects/e4/51e1f97987612782f91943c770272eb031e64c
./objects/e4/99e9d89a87cd282f6c6bd0668e118322248d91
./objects/info
./objects/pack
./refs
./refs/heads
./refs/heads/master
./refs/tags

同样的,在objects目录下又多出了一些东西,那这些新增的文件都是什么呢?

首先看一下master里面现在存的是什么。

➜  .git git:(master) cat ./refs/heads/master
e499e9d89a87cd282f6c6bd0668e118322248d91

可以看到里面存了一个Sha1值,可能你已经注意到这个Sha1值就存在于objects目录下。那么打开这个object文件看看里面的存是什么。


                
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值