标签:html com sha-1 变化 重要 调用 目标 size fonts
一句话总结的说,Git是一个开源的分布式版本号控制系统,由Linux内核开发者开发,现已用来管理android等多个大型项目。
设计目标:
当然。这仅仅是表面。
单从tortoise这个工具来说,tortoiseSVN内嵌了SVN的命令;而tortoiseGit仅仅是个“皮”。负责调用Git的各个命令,这也是在安装tortoiseGit之前要安装Git的原因。
再进一步的说,SVN是集中式的版本号控制系统,Git是分布式的版本号控制系统,分布式和集中式的区别还是非常大的:
在Git中,全部保存在Git中的内容都是用此哈希码作为索引的,所以在有关Git的操作中。常常见到此类“指纹”:
24b9da6552252987aa493b52f8696cd6d3b00373
Git中有下面四种主要对象:
1. blob: 用于存储数据,一般来说就是文件
2. tree: 与文件夹非常像,保存的是对其他tree、blod的引用
3. commit:指向一个特定的tree,并记录相关的时间、描写叙述等信息
4. tag: tag指向一个特定的commit。它像分支引用,但不会变化
这几种对象的关系例如以下图所看到的:
通过这几种对象,Git能够非常有条理的管理内容和版本号。
这样做的优点是能够非常大程度上节省硬盘空间。但假设要得到指定版本号的文件都要先找到近期的快照,然后合并上改变的部分,所以速度较慢,来看一下Git的存储机制:
Git的存储机制是假设文件有变化。那么就直接再保存一个该文件完整的版本号,这样的做法的不足之处也显而易见。就是须要很多其它的硬盘空间;可是优点也非常明显:得到指定版本号是瞬时的,而且这样的机制对于分支、合并的管理非常易操作。
这是一种以空间换效率的方式,大智若愚。
在Git中分支和合并异常轻量级的,所以Git鼓舞开发人员多使用分支和合并。分支和合并的使用时Git非常重要的一部分,本文仅作简介,抛砖引玉,详见《Pro Git》。
由上面提到的对象机制和存储机制。能够知道在Git中。多次提交commit后,仓库变为:
而分支即是指向这些commit的指针文件,这个文件就是包括对象校验和(就是上面提到40字节的SHA-1子串)的文件,所谓的新建分支不过向一个文件增加41个字节(另一个自己的换行符)。所以在Git中新建分支很高速而且便宜。
它是将代码存放在中心server。能够接受全部开发人员代码,这样的工作流与SVN时的思想一致,适合较小的项目:
Git支持每一个开发者都有自己的远程库。因此能够让官方有一个主库,每一个开发者有一个远程仓库,开发者向自己的库中更新内容,官方管理员负责收集、选择、整合这些更新到主库:
GitHub上採用最多的就是这样的工作流。
这个是在集成管理员工作流的基础上改进的,一般很大的项目才会使用。如linux内核开发。这样的工作流的核心是在集成管理员工作流的基础上加入了一个超级管理员和若干个管理员。即:多个管理员负责从开发人员的远程仓库中收集、选择、整合更新的内容到自己负责的主仓库中,再由超级管理员对管理员集成的内容二次筛选,整合到主库中:
关于Git的内容就讲到这里,并非说Git比SVN更好。没有哪种版本号管理更好,也没有哪种工作流程更好,依据当前环境,合适的才是最好的。
标签:html com sha-1 变化 重要 调用 目标 size fonts
原文地址:http://www.cnblogs.com/yutingliuyl/p/6746790.html