Git学习参考网址open in new window

Chapter 1 起步

1.1 关于版本控制

  • 版本控制就是一种记录一个或若干文件内容变化,以便于将来查阅特定版本修订情况的系统。
  • 版本控制系统(VCS)
  • 作用:
    • 可以将某个文件回溯到之前的状态,或将整个项目都回退到过去的某个时间点的状态。
    • 查看谁修改了什么地方,从而查找问题的所在。
    • 就算你乱改一气,也能将整个项目回复到原先的版本。

本地版本控制系统

  • 也许复制整个项目目录的方式来保存不同的版本,或许还会改名来备份以示区别。简单但容易犯错。
  • 以前大多采用简单的数据库来记录文件的历次更新差异。

本地版本控制

  • RCS:工作原理:它的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。

集中化的版本控制系统

  • 为了满足在不同系统上的开发者协同工作。
  • 集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)
  • 这类系统,诸如 CVS、Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

集中化的版本控制

分布式版本控制系统

  • Distributed Version Control System,简称 DVCS。
  • 这类系统中,像Git、Mercurial、Bazaar、Darcs等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。
  • 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

分布式版本控制

1.2 Git简史

  • 详细参考open in new window
  • 目标:
    • 速度
    • 简单的设计
    • 对非线性开发模式的强力支持(允许巨量的并行开发的分支)
    • 完全分布式
    • 有能力高效管理类似Linux内核一样的超大规模项目(速度&数据量)

1.3 Git基础

  • Git和其他版本控制系统的主要差别在于Git对待数据的方法。

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

  • 以下就是大部分系统以文件变更列表的方式存储信息

存储每个文件与初始版本的差异

  • Git把数据看作是对小型文件系统的一组快照。每次提交更新,或在Git中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。 为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个 快照流。

存储项目随时改变的快照

  • 这是git与其他版本控制系统的重要区别。

近几乎所有的操作都是本地执行

  • 在Git中绝大多数操作都只需要访问本地文件和资源,一般不需要来自互联网上其他计算机的信息。
  • 这很nice

Git保证完整性

  • Git中所有的数据在存储前都计算校验和,然后以校验和来引用。这表示不可能在Git不知情时更改任何文件内容或目录内容。
  • Git用以计算校验和的机制叫做SHA-1散列(hash,哈希)。
  • 这是一个由 40 个十六进制字符(0-9 和 a-f)组成的字符串,基于 Git 中文件的内容或目录结构计算出来。 SHA-1 哈希看起来是这样:
24b9da6552252987aa493b52f8696cd6d3b00373
  • 在使用Git时会经常看到上述的哈希值。实际上Git数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。

Git一般只添加数据

  • 你执行的 Git 操作,几乎只往 Git 数据库中增加数据。 很难让 Git 执行任何不可逆操作,或者让它以任何方式清除数据。
  • 一旦你提交快照到 Git 中,就难以再丢失数据,特别是如果你定期的推送数据库到其它仓库的话。
  • 更深层次探讨如何保存数据及恢复丢失数据的话题,可以参考撤销操作open in new window

三种状态

  • 已提交(committed) : 表示数据已经安全的保存在本地数据库中

  • 已修改(modified) : 修改了文件,但还没有保存到数据库中

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

  • 提交的文件只能处于这三种状态之一;

  • Git项目的三个工作区域的概念: Git仓库、工作目录以及暂存区域

工作目录、暂存区域以及Git仓库

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

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

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

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

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

1.4 起步——命令行

  • 原生的命令行模式:可以执行Git的所有命令
  • GUI:只实现了Git所有功能的一个子集来降低操作难度
  • 所以建议:以命令行来执行Git命令

1.5 安装Git

1.6 起步——初次运行Git前的配置