版本控制系统技术演进史,从SCCS到Git(19)
Git实现了一个staging索引 , 该索引被设计为在提交的中间区域 。 在准备提交新更改时 , 它们的压缩内容在特殊的索引文件中被引用 , 该文件采用树对象的形式 。
树对象是另一种Git对象 , 对应于文件目录 , 它将blob对象连接到它们的真实文件名 , 文件许可权和到其他树的链接 , 并以此方式表示特定文件和目录集的状态 。 一旦所有相关更改都准备好提交 , 索引树就可以提交到存储库 , 该存储库在Git对象数据库中创建一个commit对象 。
commit对象保存特定修订的标题树以及提交作者 , 电子邮件地址 , 日期和描述性提交消息 。 每个commit对象还保存对其父提交的引用 , 因此随着时间的推移 , 将建立项目开发的历史记录 。
如前所述 , 所有Git对象(Blob , tree和commit)都根据其哈希值进行压缩 , 哈希处理并存储在对象数据库中 。 这些被称为松散对象 。 Git实现中没有通过差异来节省空间 , 而都是全部内容哈希键索引和压缩镜像 , 所以 , Git非常快 , 因为每个文件修订版的全部内容都可以作为一个松散的对象来访问 。 但是 , 某些操作(例如 , 将提交推送到远程存储库 , 存储太多对象或手动运行Git的垃圾收集命令)可能会导致Git将对象重新打包为打包文件 , 在打包过程中 , 采用反向差异并进行压缩以消除多余的内容并减小尺寸 。 该过程将生成包含对象内容的.pack文件 , 每个文件都有一个对应的.idx索引文件 , 其中包含对打包对象及其在打包文件中位置的引用 。
推荐阅读
- 杰斯·麦卡兰|LOL手游2.5版本,杰斯“加强炮”打不动脆皮?关键在于装备改动!
- 德鲁伊|《炉石传说》:新版本硬核实力谁最强?德鲁伊才是大BOSS!
- 原神|原神:2.6版本迎来巨变,草系角色将直接上线,瑶瑶女玩家狂喜!
- 魔兽世界|魔兽世界:60版本赛季服最新消息,大家都跑过去体验,真香定律
- 池子|“为什么优菈总是在让人始料未及的版本到来?我还没准备好呀!”
- 单机|《DNF》单机手游版,“女枪”版本更耐玩哦!
- 女孩|UZI谈版本猫咪热门原因:段位低的人不懂,下路AD带双虚弱的强大
- 神超|云顶之弈S6来袭,神超分享上分组合,一枪秒敌,这就是版本答案
- kpl|主播趣闻:卡萨吐槽转会谣言,姿态实锤复出!硬币哥梦回S9版本
- 原神|原神:新版本直播送300原石!新版本卡池公布,阿贝多和优菈复刻