目录
1.关于版本控制
版本控制是用来做什么的呢?版本控制是用来记录一个或者多个文件的变化,以便将来查看特定版本变化的情况。
下面是版本控制系统的发展情况:
1.1本地版本控制系统
本地版本控制系统通常都是使用简单的数据库来记录每次文件更新的差异本地版本控制系统中最流行的一种叫做RCS,RCS是通过在硬盘上保存补丁集(补丁指文件修改前后的差异),通过应用所有的补丁,可以计算各个版本的文件内容。
1.2集中化版本控制系统
但是本地版本控制系统无法满足多个操作者在不同机器上协同工作。此时集中化版本控制系统就应运而生。现在常用的SVN(Subversion)就是集中化版本控制系统。
集中化版本控制系统,都有一个单一的集中的服务器,用来保存所有文件的修订版本。协同工作的人可以通过客户端与这台机器进行连接,从而可以取出最新的文件或者提交文件更新。
集中化的版本控制系统带来的好处就是,可以看到不同操作者都做了些什么。对于管理员来说管理一个服务器远比管理多个本地数据库还要轻巧得多。
那么集中化的版本控制系统不好在哪里呢,由于集中化版本控制系统在客户端保存的都是最新的快照信息。一旦服务器出现故障,整个项目的变更历史就会可能出现丢失的风险。对于本地版本控制系统也一样,如果整个项目的变更历史放在一起,那么就会有丢失的风险。
1.3分布式版本控制系统
于是乎,分布式版本控制系统就出现了。与集中化版本控制系统不同的是,分布式版本控制系统保存的不仅仅是文件的快照,还将文件或者项目的变更历史给保存在客户端了。也就是把整个项目完整地镜像下来。
这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
2.Git简史
Git是由Linus创造的,Linus是Linux之父,具体的可以去某度一下。
Git的目标:
• 速度
• 简单的设计
• 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
• 完全分布式 • 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
3.Git是什么
3.1直接记录快照,而非差异比较
Git与其他版本控制系统主要差别是在于Git对待数据的方法。其他大部分版本控制系统以文件变更列表的方式存储数据。这类系统把将要存储的数据看作是一组基本文件和每个文件日积日累的差异。
而Git是把数据看成小型文件系统的一系列快照。每当提交更新和保存项目状态的时候,git会对当时的全部文件创造一个快照并且保存这个快照的索引。如果文件没有发生变化,git不会重新存储该文件,但是会保留一个链接指向之前存储的这个文件。
似乎有点空间换时间的意思。
3.2近乎所有操作都是本地执行
git的绝大多数操作都是访问本地的资源,这样就会大大减少网络延时带来的不便。因为本地有完整的项目历史,所以很多操作看上去都是一下子完成。
3.3Git保证完整性
Git 中所有的数据在存储前都计算校验和,然后以校验和来引用。(待补充)
3.4Git一般只添加数据
通常我们对Git的操作都是添加数据,很难让git执行什么不可逆的操作。
3.5Git工作流程及状态
Git的工作流程:
1、在工作区修改文件。(我理解的工作区就是对应平时我们用IDE操作项目的地方,或者说是项目存在的地方)
2、将修改的文件选择性的暂存,暂存的文件会添加到暂存区。(当我们对某些文件进行修改了之后,会执行add操作,这个操作就是将相应的文件添加进暂存区)
3、提交更新,找到暂存区的文件,将快照永久性存储到git目录。(这一步就是平时我们的commit步骤,执行commit将暂存区中的文件提交到本地仓库中)
如果git目录保存着特定版本的文件,这时候就属于“已提交状态(committed)”,如果将文件添加进暂存区,这时候就属于“已暂存状态(staged)”,如果对文件进行修改之后还没添加进暂存区,那么这时候就属于“已修改状态(modified)”。