博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Git 追踪内容详解
阅读量:4041 次
发布时间:2019-05-24

本文共 778 字,大约阅读时间需要 2 分钟。

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 打包文件》,链接:

 

转载地址:http://pkadi.baihongyu.com/

你可能感兴趣的文章
python监控系统(flask+python+html)
查看>>
oracle从备份集中恢复归档日志方法
查看>>
Oracle跨版本与跨平台执行传输表空间(XTTS)
查看>>
fatal: unable to access 'https://github.com/danfengcao/binlog2sql.git/': SSL connect error
查看>>
Mysql误操作后使用binlog2sql快速回滚
查看>>
sql loader导出数据和导入数据(sqlldr)
查看>>
RedoLog Checkpoint 和 SCN关系
查看>>
Oracle 实例恢复时 前滚(roll forward) 后滚(roll back)
查看>>
Oracle redo log 机制
查看>>
全面解析9i以后Oracle Latch闩锁原理
查看>>
Oracle Enqueue lock队列锁机制
查看>>
Oracle 删除表后多出了类似BIN$bdqTEdDrT7iRIC2+iRTfXQ==$0的表
查看>>
Oracle 18c创建PDB的几种方式
查看>>
ORA-65016: FILE_NAME_CONVERT must be specified
查看>>
oralce 18c 创建PDB方式——利用seed(种子)模板来创建
查看>>
RAC, Data Gurad, Stream 讲解
查看>>
Oracle 18c CON_GUID_TO_ID
查看>>
Oracle 18c 创建PDB可使用的参数说明
查看>>
ORA-39071: Value for EXCLUDE is badly formed.
查看>>
ORA-65359: unable to create pluggable database with no data
查看>>