- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 8 章 揭开⾯纱
我们揭开Git神秘⾯纱,往⾥瞧瞧它是如何创造奇迹的。我会跳过细节。更深⼊的描
参 见 ⽤户⼿ 册。
⼤象⽆形
数据完整性
智能
索引
Git的源起
对象数据库
Blob对象
Tree对象
Commit对象
没那么神
⼤象⽆形
Git怎么这么谦逊寡⾔呢?除了偶尔提交和合并外,你可以如常⼯作,就像不知道版本
控 制系统存在⼀样。那就是,直到你需要它的时候,⽽且那是你欢欣的时候,Git⼀
直默默 注视着你。
其他版本控制系统强迫你与繁⽂缛节和官僚主义不断⽃争。⽂件的权限可能是只读
的, 除⾮你显式地告诉中⼼服务器哪些⽂件你打算编辑。即使最基本的命令,随着⽤
户数⽬ 的增多,也会慢的像爬⼀样。中⼼服务器可能正跟踪什么⼈,什么时候check
out 了什么 代码。当⽹络连接断了的时候,你就遭殃了。开发⼈员不断地与这些版本
控制系统的种 种限制作⽃争。⼀旦⽹络或中⼼服务器瘫痪,⼯作就嘎然⽽⽌。
与之相反,Git简单地在你⼯作⽬录下的.git`⽬录保存你项⽬的历史。这是你⾃⼰的
历 史拷⻉,因此你可以保持离线,直到你想和他⼈沟 为⽌。你拥有你的⽂件命运
完全的 控制权,因为Git可以轻易在任何时候从.git`重建⼀个保存状态。
数据完整性
很多⼈把加密和保持信息机密关联起来,但⼀个同等重要的⽬标是保证信息安全。合
理 使⽤哈希加密功能可以防⽌⽆意或有意的数据损坏⾏为。
⼀个SHA 1哈希值可被认为是⼀个唯⼀的160位ID数,⽤它可以唯⼀标识你⼀⽣中遇到
的每 个字节串。 实际上不⽌如此:每个字节串可供任何⼈⽤好多辈⼦。
对⼀个⽂件⽽⾔,其整体内容的哈希值可以被看作这个⽂件的唯⼀标识ID数。
因为⼀个SHA 1哈希值本⾝也是⼀个字节串,我们可以哈希包括其他哈希值的字节
串。这 个简单的观察出奇地有⽤:查看“哈希链” 。我们之后会看Git如何利⽤这⼀点
来⾼效地 保证数据完整性。
简⾔之,Git把你数据保存在.git/objects⼦⽬录,那⾥看不到正常⽂件名,相反
你只 看到ID 。通过⽤ID作为⽂件名,加上⼀些⽂件锁和时间戳技巧,Git把任意⼀个
原始的⽂ 件系统转化为⼀个⾼效⽽稳定的数据库。
智能
Git是如何知道你重命名了⼀个⽂件,即使你从来没有明确提及这个事实?当然,你或
许 是运⾏了 git mv ,但这个命令和 git add 紧接 git rm 是完全⼀样的。
Git启发式地找出相连版本之间的重命名和拷贝。实际上,它能检测⽂件之间代码块的
移 动或拷贝 !尽管它不能覆盖所有的情况,但它已经做的很好了,并且这个功能也总
在改 进中。如果它在你那⼉不⼯作的话,可以尝试打开开销更⾼的拷贝检测选项,并
考虑升 级。
索引
为每个加⼊管理的⽂件,Git在⼀个名为“in ex”的⽂件⾥记录统计信息,诸如⼤⼩,
创建时间和最后修改时间。为了确定⽂件是否更改,Git ⽐较其当前统计信息与那些在
索 引⾥的统计信息。如果⼀致,那Git就跳过重新读⽂件。
因为统计信息的调⽤⽐读⽂件内容快的很多,如果你仅仅编辑了少数⼏个⽂件,Git⼏
乎 不需要什么时间就能更新他们的统计信息。
我们前⾯讲过索引是⼀个中转区。为什么⼀堆⽂件的统计数据是⼀个中转区?因为添
加 命令将⽂件放到Git的数据库并更新它们的统计信息,⽽⽆参数的提交命令创建⼀
个提交, 只基于这些统计信息和已经在数据库⾥的⽂件。
Git 的源起
这个 Linux 内核邮件列表帖⼦ 描 了导致Git 的⼀系列事件。整个讨论线索是⼀个令
⼈着迷的历史探究过程,对Git史学家⽽⾔。
对象数据库
你数据的每个版本都保存在“对象数据库”⾥,其位于⼦⽬录.git/objects`;其他
位 于.git/` 的较少数据:索引,分⽀名,标签,配置选项,⽇志,头提交的当前位置
等。 对象数据库朴素⽽优雅,是Git的⼒量之源。
.git/objects⾥的每个⽂件是⼀个对象。有3 中对象跟我们有关:“blob”对象,
“tree”对象,和“commit”对象。
Blob对象
⾸先来⼀个⼩把戏。去⼀个⽂件名,任意⽂件名。在⼀个空⽬录:
$ echo sweet YOUR_FILENAME
$ git init
$ git dd .
$ find .git/objects -type f
你将看
到 .git/objects/
您可能关注的文档
- 儿科护理学课程教学大纲(副本).doc
- 第6章 HIV抗体检测.doc
- 第七篇内分泌代谢性疾病.doc
- 医学免疫学实验教案资料.doc
- 支气管哮喘全球治疗新突破要领.doc
- 16护士资格考试模拟题全套下载.doc
- 11三基考核试题答案(检验)-3.doc
- 中国医科大学131考试《康复护理学》考查课试题答案.doc
- 第三章 级动物病理学实验指导().doc
- 建筑设备习题详解.doc
- 上课《归园田居(其一)》课件28张.pptx
- 色彩的魅力课件55.ppt
- 山水田园诗导学练习鉴赏.ppt
- 部编版《白鹭》课件.pptx
- 《Excel在财务中的应用》项目七 全面预算编制方法与应用 教学课件.pptx
- 《Excel在财务中的应用》项目六 利润管理决策模型与应用 教学课件.pptx
- 《Excel在财务中的应用》项目五 运营资金的管理 教学课件.pptx
- 《Excel在财务中的应用》项目四 项目投资管理决策与应用 教学课件.pptx
- 《Excel在财务中的应用》项目三 筹资管理决策模型与应用 教学课件.pptx
- 《Excel在财务中的应用》项目二 Excel 常用函数基础 教学课件.pptx
文档评论(0)