Git 追踪内容详解

Git不仅仅是一个版本管理系统,同时还是一个内容追踪系统,Git 的内容追踪主要表现为两种关键的方式:

第一种方式:

Git的对象库不是基于用户文件布局的文件名或目录名设置,而是基于其对象的SHA1散列值来设置。当Git存放一个文件到对象库的时候,它是基于文件内容的SHA1散列值,而不是根据对象的文件名。因此,Git 并不跟踪与文件相关的文件名和目录名,而是跟踪的是文件的内容。

Git根据文件的内容来计算该文件的SHA1散列值,如果两个文件的内容完全一样,那它们的SHA1值是相同的,反过来说,如果两个文件的SHA1散列值是相同的,那么它们的内容是完全一样的。

如果两个文件中的内容完全一样,无论它们是否在相同的目录中,Git 在对象库中只保留一份blob对象副本,并以SHA1散列值作为索引,这两个文件都使用该blob对象指代文件内容。

如果版本库中的某一文件内容发生变化,Git会根据它的内容计算一个新的SHA1散列值,识别出这是一个不同的blob对象,然后把这个新的blob对象添加到对象库中。原来的blob对象在对象库里不变,继续为没有变化的文件使用。

第二种方式:

由于Git使用一个文件的全部内容的SHA1散列值作为文件的索引,Git必须对每个文件的完整副本进行操作,而不能将对象库条目奖励在文件内容的一部分挥着文件的两个版本之间的差异上。当文件从一个版本变化到下一个版本时,Git的内部数据库有效地存储每个文件的每个版本,而不是文件在两个版本之间的差异。

Git用不同SHA1散列值的blob之间的区别来计算这个历史,而不是直接存储一个文件名和一系列的差异。

问题:

直接存储每个文件每个版本的完整内容是否太低效?

如果只添加或改变一行是不是要存储两个版本的全部内容?

答案:

不完全是!具体讲解请看下一篇博客《Git 打包文件》,链接:https://blog.csdn.net/sean_8180/article/details/82717823

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值