Linux企业实战(四十五)——持续集成与持续交付(二)

git工具(一)

(1)什么是git

  • git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

(2)git的特点

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

(3)git和其他版本控制器的差异

  • 直接记录快照,而非差异比较

    • git 和其它版本控制系统(包括 Subversion 和近似工具)的主要差别在于 Git 对待数据的方式。 从概念上来说,其它大部分系统以文件变更列表的方式存储信息,这类系统(CVS、Subversion、Perforce、Bazaar 等等) 将它们存储的信息看作是一组基本文件和每个文件随时间逐步累积的差异 (它们通常称作 基于差异(delta-based) 的版本控制)。
      在这里插入图片描述
    • git 不按照以上方式对待或保存数据。反之,git 更像是把数据看作是对小型文件系统的一系列快照。 在 git 中,每当你提交更新或保存项目状态时,它基本上就会对当时的全部文件创建一个快照并保存这个快照的索引。 为了效率,如果文件没有修改,git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 git 对待数据更像是一个 快照流。
      在这里插入图片描述
    • 这是 git 与几乎所有其它版本控制系统的重要区别。 因此 git 重新考虑了以前每一代版本控制系统延续下来的诸多方面。 git 更像是一个小型的文件系统,提供了许多以此为基础构建的超强工具,而不只是一个简单的 VCS。
  • 近乎所有操作都是本地执行

    • 在 git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。 如果你习惯于所有操作都有网络延时开销的集中式版本控制系统,git 在这方面会让你感到速度之神赐给了 git 超凡的能量。 因为你在本地磁盘上就有项目的完整历史,所以大部分操作看起来瞬间完成。

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

    • 这也意味着你在离线或者没有 VPN 时,几乎可以进行任何操作。 如你在飞机或火车上想做些工作,就能愉快地提交(到你的本地副本,还记得吗?), 直到有网络连接时再上传。如你回家后 VPN 客户端不正常,那么也仍能工作。 使用其它系统的话,做到这些是不可能或很费力的。 比如,用 Perforce 的话,没有连接服务器时几乎不能做什么事;而用 Subversion 和 CVS 的话, 你能修改文件,但不能向数据库提交修改(因为你的本地数据库离线了)。 这样似乎问题不大,但是你可能会惊喜地发现它带来的巨大的不同。

  • git 保证完整性

    • git 中所有的数据在存储前都计算校验和,然后以校验和来引用。 这意味着不可能在 git 不知情时更改任何文件内容或目录内容。 这个功能建构在 git 底层,是构成 git 哲学不可或缺的部分。 若你在传送过程中丢失信息或损坏文件,git 就能发现。
    • git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和 a-f)组成的字符串,基于 git 中文件的内容或目录结构计算出来。 SHA-1 哈希看起来如下:
31d9cb4321180658ba693c52f8586cd6d3b00262
  • git一般只添加数据

    • 你执行的 Git 操作,几乎只往 git 数据库中添加数据。 你很难使用 git 从数据库中删除数据,也就是说 git 几乎不会执行任何可能导致文件不可恢复的操作。 同别的 VCS 一样,未提交更新时有可能丢失或弄乱修改的内容。但是一旦你提交快照到 git 中, 就难以再丢失数据,特别是如果你定期的推送数据库到其它仓库的话。这使得我们使用 git 成为一个安心愉悦的过程,因为我们深知可以尽情做各种尝试,而没有把事情弄糟的危险。

(4)git中的三种状态

  • git有三种状态分别为:已提交(committed)、已修改(modified) 和 已暂存(staged)。

    • 已修改表示修改了文件,但还没保存到数据库中。

    • 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

    • 已提交表示数据已经安全地保存在本地数据库中。

  • 这就会让git项目拥有三个阶段:工作区、暂存区以及 Git 目录。
    在这里插入图片描述

    • 工作区是对项目的某个版本独立提取出来的内容。 这些从 git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
    • 暂存区是一个文件,保存了下次将要提交的文件列表信息,一般在 git 仓库目录中。 按照 git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。
    • git 仓库目录是 git 用来保存项目的元数据和对象数据库的地方。 这是 git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。

(5)基本的 git 工作流程

  • git的基本工作流程如下:

    • 1)、在工作区中修改文件。

    • 2)、将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。

    • 3)、提交更新,找到暂存区的文件,将快照永久性存储到 git 目录。

注意:如果 git 目录中保存着特定版本的文件,就属于已提交状态。 如果文件已修改并放入暂存区,就属于已暂存状态。 如果自上次检出后,作了修改但还没有放到暂存区域,就是已修改状态。

声明:以上内均参考了https://git-scm.com/book/zh/v2中的内容

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页