git----professional version control system
起步
一、关于version control system
1、local version control system
采用某种简单的数据库来记录文件的历次更新差异!
其中最流行的一种叫做 rcs,工作原理基本上就是保存并管理文件补丁(patch)。文件补丁是一种特定格式的文本文件,记录着对应文件修订前后的内容变化。所以,根据每次修订后的补丁,rcs 可以通过不断打补丁,计算出各个版本的文件内容。
2、Centralized Version Control Systems
为了解决在不同系统上的开发者协同工作问题,才出现的。
有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
缺点:
最显而易见的缺点是中央服务器的单点故障。若是宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
3、Distributed Version Control System
客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。
这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。
二、the mian points of git
1、直接快照,而非比较差异
Git 只关心文件数据的整体是否发生变化,Git 并不保存这些前后变化的差异数据。
Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一连接。
Git 更像是个小型的文件系统。
2、近乎所有操作都可本地执行
因为 Git 在本地磁盘上就保存着所有有关当前项目的历史更新。
3、时刻保持数据完整性
在保存到 Git 之前,所有数据都要进行内容的校验和(checksum)计算,并将此结果作为数据的唯一标识和索引。
Git 使用 SHA-1 算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个 SHA-1 哈希值,作为指纹字符串。该字串由 40 个十六进制字符(0-9 及 a-f)组成,看起来就像是:24b9da6552252987aa493b52f8696cd6d3b00373
实际上,所有保存在 Git 数据库中的东西都是用此哈希值来作索引的,而不是靠文件名。
4、多数操作仅添加数据
5、三种状态
对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)
committed:已提交表示该文件已经被安全地保存在本地数据库中了
modified:已修改表示修改了某个文件,但还没有提交保存
staged:已暂存表示把已修改的文件放在下次提交时要保存的清单中
文件流转的三个工作区域:Git 的本地数据目录(git directory),工作目录(working directory)和暂存区域(staging area)
git directory:它是 Git 用来保存元数据和对象数据库的地方。该目录非常重要,每次克隆
镜像仓库的时候,实际拷贝的就是这个目录里面的数据。
working directory:从项目中取出某个版本的所有文件和目录,接下来就可以在工作目录中对这些文件进行编辑。
staging area:是个简单的文件,一般都放在 git directory中。有时候人们会把这个文件叫做索引文
件,不过标准说法还是叫暂存区域。
git的工作流程图:
如果在 git directory中保存着的特定版本文件,就属于committed;如果作了修改并已放入staging area,就属于staged;如果自上次取出后,作了修改但还没有放到staging area,就modified。
三、在 Windows 上安装并配置git
下载地址http://code.google.com/p/msysgit
git-config 命令:专门用来配置或读取相应的工作环境变量。这些变量可以存放在以下三个不同的地方:
•/etc/gitconfig文件:系统中对所有用户都普遍适用的配置。若使用git config 时用--system 选项,读写的就是这个文件。
•~/.gitconfig文件:用户目录下的配置文件只适用于该用户。若使用git config 时用--global 选项,读写的就是这个文件。
•当前项目的 git 目录中的配置文件(也就是工作目录中的.git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以.git/config 里的配置会覆盖/etc/gitconfig中的同名变量。
1、用户信息
第一个要配置的是你个人的用户名称和电子邮件地址。
用了--global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或者电邮,只要去掉--global 选项重新配置即可,新的设定保存在当前项目的.git/config 文件里。
2、文本编辑器
要设置的是默认使用的文本编辑器。默认会使用操作系统指定的默认编辑器,一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置:
3、差异分析工具
在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:
4、查看配置信息
使用git config --list 命令:
也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可,像这样:
5、获取帮助
方法有三: