git学习(2)git 的工作原理和特性

git的诞生
Linux 内核开源项目有着为数众多的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。

到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标:

  1. 速度
  2. 简单的设计
  3. 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
  4. 完全分布式
  5. 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

git 工作原理:
Git 像是把数据看作是对小型文件系统的一组快照。 每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。 为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个 快照流。
git快照
在 Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。相较于集中式的版本控制系统,在本地运行的git的速度非常快。

git的几个特性:
(1)分布式的特性,所以你可以在本地进行工作
举个例子,要浏览项目的历史,Git 不需外连到服务器去获取历史,然后再显示出来——它只需直接从本地数据库中读取。 你能立即看到项目历史。 如果你想查看当前版本与一个月前的版本之间引入的修改,Git 会查找到一个月前的文件做一次本地的差异计算,而不是由远程服务器处理或从远程服务器拉回旧版本文件再来本地处理。

这也意味着你离线或者没有 VPN 时,几乎可以进行任何操作。 如你在飞机或火车上想做些工作,你能愉快地提交到你本地的计算机里面的版本仓库中。等到到有网络连接时再将修改的文件上传到远端代码仓库,和远端的代码仓库同步。但是如果你使用的是集中式的版本控制系统,那么,在没有网络连接的时候,就连不到版本仓库,没有办法提交你的修改。
(2)可以保证数据的完整性
在我们对文件修改之后,git都可以检测到我们的修改,识别出当前工作空间中的文件和版本库中最新版本文件的差别。git使用哈希校验和的方式来识别文件文件的差别,在文件的传输过程中,如果发生了数据丢失或者文件损坏,那么git都可以检测出来,从而保证数据的完整性。
Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和 a-f)组成字符串,基于 Git 中文件的内容或目录结构计算出来。 SHA-1 哈希看起来是这样。
(3)操作过程一般只是添加数据
git 的操作基本上都是一些添加数据的操作,你的任何一次提交都会有记录。所以不用担心之前的操作会丢失,如果你有经常提交代码的习惯的话,那么你的代码会很安全和很完整的保存在代码仓库中。当你不小心删除文件,或者出于其他任何需要,而需要将代码撤回到之前的版本的时候,都是可以很方便就实现的。

开始之前你要知道的 git 的三个基础状态:
git 有三种状态,我们的任何一个使用 git 来进行版本控制的文件都会处于下边的一种状态:

  1. 已提交(committed)
  2. 已修改(modified)
  3. 已暂存(staged)
    在这里插入图片描述

Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。

工作目录是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。

暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作`‘索引’’,不过一般说法还是叫暂存区域。

基本的 Git 工作流程如下:

  1. 在工作目录中修改文件。
  2. 暂存文件,将文件的快照放入暂存区域。
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

如果 Git 目录中保存着的特定版本文件,就属于已提交状态。 如果作了修改并已放入暂存区域,就属于已暂存状态。 如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。 在Git 基础一章,你会进一步了解这些状态的细节,并学会如何根据文件状态实施后续操作,以及怎样跳过暂存直接提交。

猜你喜欢

转载自blog.csdn.net/u012999810/article/details/84776749