1、版本控制
是一种记录一个或若干个文件内容变化,以便将来查阅特点版本修改情况的系统
采用版本控制系统(VCS)可将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,可比较文件的变化细节,查出最后谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等,就算项目改动很大,也可恢复到原来的样子
2、本地版本控制系统
大多采用某种简单的数据库来记录文件的历次更新差异(RCS)
3、集中化版本控制系统(Centralized Version Control Systems,简称 CVCS)
让不同系统上的开发者协同工作,这类系统,如CVS、Subversion及Perforce等,都有单一的集中管理的服务器,保存所有文件的修改版本,而协同工作的人们通过客户端连接到这台机器,取出最新的文件或提交更新
好处:每个人可一定程度上看到项目中其他人在做什么,管理员也可轻松掌握每个开发者的权限,并且比在各个客户端维护本地数据库更轻松容易
坏处:中央服务器的单点故障,整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险
4、分布式版本控制系统(Distributed Version Control System,简称 DVCS)
在这类系统中,像Git、Mercurial、Bazaar 以及 Darcs等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。一旦任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。每一次克隆操作,实际上都是一次对代码仓库的完整备份
这类系统可指定和若干不同的远端代码仓库进行交互,在同一项目中分和不同小组的人相互协作
5、Git简史
Linux 内核开源项目有着为数众广的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。 到2002年,整个项目组开始启用一个专有的分布式版本控制系统BitKeeper来管理和维护代码。
到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用BitKeeper的权力。这就迫使Linux开源社区(特别是Linux的缔造者Linux Torvalds)基于使用BitKcheper 时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标:
1)速度
2)简单的设计
3)对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
4)完全分布式
5)有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
自诞生于2005年以来,Git日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统
6、Git基础
1)直接记录快照,而非差异比较
其它大部分系统以 文件变更列表的方式 存储信息,这类系统将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异
git更像是把数据看作是对小型系统的一组快照,每次提交更新或在git中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。为了高效,若文件没修改,则git不再重新存储该文件,而只保留一个连接指向之前存储的文件。
2)近乎所有操作都是本地执行
git中的绝大多数操作只需要访问本地文件和资源,在离线或没有VPN情况下可以进行操作
3)保证完整性
git中所有数据在存储前都计算校验和,然后以校验和来引用。意味着不可能在git不知情时更改任何内容和目录内容。
git用以计算校验和的机制叫做SHA-1 散列(hash,哈希)。一个有40个十六进制字符(0-9和a-f)组成字符串,基于git中文的内容或目录结构计算出来
4)git一般只添加数据
执行git操作,几乎指望git数据库中增加数据。未提交更新有可能丢失或弄乱修改的内容;但是一旦提交快照到git中,就难以在丢失数据
5)三种状态
已提交(committed):表示数据已经安全的保存在本地数据库中
已修改(modified):表示修改了文件,但还没保存到数据库中
已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中
git项目的三个工作区:
git仓库目录:git用来保存项目的元数据和对象数据库的地方。是git中最重要的部分,从其他计算机克隆仓库时,拷贝的就是这里的数据
工作目录:是对项目的某个版本独立提取出来的内容。从git仓库的压缩数据库中提取出来的文件,放在磁盘供使用或修改
* 暂存区域:一个文件,保存了下次将提交的文件列表信息,一般在git仓库目录中
git工作流程:
在工作目录中修改文件
暂存文件,将文件的快照放入暂存区域
提交更新,找到暂存区域的文件,将快照永久性存储到git仓库目录
7、命令行
git有多种使用方式,可使用原生的命令行模式,也可使用GUI模式
8、安装git
1)Linux安装
yum install git
要了解更多选择,Git 官方网站上有在各种 Unix 风格的系统上安装步骤,网址为 http://git-scm.com/download/linux
2)在mac上安装
在 Mac 上安装 Git 有多种方式。 最简单的方法是安装Xcode Command Line Tools。 Mavericks (10.9) 或更高版本的系统中,在 Terminal 里尝试首次运行 git 命令即可。 如果没有安装过命令行开发者工具,将会提示你安装。
如果你想安装更新的版本,可以使用二进制安装程序。 官方维护的 OSX Git 安装程序可以在 Git 官方网站下载, 网址为 http://git-scm.com/download/mac