Git 最初设计是为了满足 Linux 项目的开发,其需要有以下的特点: * 速度:因为 Linux 内核代码量庞大,如果速度缓慢则会影响使用 * 简单的设计 * 支持非线性开发:Linux等项目往往有众多开发者开发,必须支持同时的分支 * 完全的分布式设计 * 能够处理大型项目:快的速度与大的数据量支持
Git 存储版本快照
Git 存储的是一个时刻所有文件的快照,而不是差别。对于 Subversion 等版本 控制软件,其存储的是某一个时刻,该版本不同的文件相对于上个版本的差异, 而 Git 存储的是当前版本的所有文件的快照。为了节省空间,如果当前版本中 某些文件没有发生变化,则记录的是之前的文件,而不会重新存一份。
Git 本地
化几乎所有的操作Git 是分布式的版本控制软件,所有的数据在本地都有一份。 所以使用 Git 读取数据,其直接从硬盘上读取信息,而不需要联网从服务器获 取信息,使得所有的操作都可以在本地进行并且避免了网络延迟对于速度的影响。 在未联网的情况下,可以直接使用 Git 的命令去查询历史、记录修改的文件等 几乎所有操作。
Git 保持完整性
Git 在存储文件之间都对内存进行了校验和,并且使用该校验和来引用文件。所 以,任何对 Git 数据的修改都会被发现,这就保证了 Git 的数据完整性。对于 校验和的使用是作为 Git 最底层的技术的,不能被轻易地修改。Git 使用 160 位的十六进制 SHA-1 哈希值做校验和 (如: 303ff981c488b812b6215f7db7920dedb3b59d9a)。在.git/object 文件夹下所有 的数据也是以其校验和作为文件名的。
Git 记录文件的三个阶段
Git 对于文件的版本控制有三个阶段,分别为:modified,staged,commited。 这三个阶段也分别对应三个存储位置,modified 的文件信息位于工作目录中 (working directory),staged 的信息存于 .git/index 文件中,而commited 的信息存于 .git/objects 文件夹中。使用 Git 进行版本控制的流程包括:
- 在工作目录中修改文件;
- 把修改的文件添加到 stage,使用 git add 命令;
- 把 stage 的文件添加到 Git 的存储中,完成 commit,使用 git commit 命 令,相应的数据会被保存到.git/objects 文件夹下。
文件可以在这三个阶段间 进行切换,从而可以记录版本或者回滚到原来的版本。