git探索

闲话

以前最开始在公司开发代码的时候,由于没有相应的版本库,基本上每次都是需要自己在本地维护一份代码,而且时间久了自己也不会记得。后面慢慢开始使用git作为版本控制,在内部搭建了一套gitlab。

git的版本控制原理

git本身挺强大的,可以多个人不同机器上进行协作开发,提高工作效率。其工作原理都是原来于.git这个目录。

其中hook目录可以定制一些脚本在合适的事件触发时调用,head和orig_head维护当前位置指针,index是暂存区,objects是记录着项目涉及的目录文件提交等信息,logs维护各个分支的提交历史,refs是分支的情况,config是仓库的配置信息。

我们考虑一个问题,为什么我们切换分支的时候,git是如何改变我们当前的版本环境的,这个问题其实我并没有从代码去研究,我只是稍微观察了下git每次操作后会发生什么变化。

首先可以观察下加入我在项目添加一个目录,然后添加一个文件,提交到版本库。 这个时候通过观察.git目录的变化,比如我添加一个目录test2,然后添加一个文件bbb。

git log

git show 695df69c9a76 查看commit与上次commit对象的差别信息:

git cat-file -p 695df69c9a76 查看commit对象内容:

每个提交对应有一个全局的目录结果结果:

git cat-file -p 044b7e0fbf70fe3d2ba69439c5812e5f5f0445fd 查看tree对象,该044b7e0fbf70fe3d2ba69439c5812e5f5f0445fd是从上面目录结果中获取到:

git show f761ec1查看新文件对象:

因此可以看到,git创建一个文件可以通过log找到需要的commit对象信息,然后cat-file查看到其指向tree对象的索引,git通过这些索引可以找到该版本下对应的文件结构并将文件还原回去。

object name的由来

根据git的文件格式组织好文本,然后计算出文本内容的hash值,将文本格式压缩后写入,并按照hash值写入到object目录里面。hash值前两位作为目录名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值