学习git官方文档-------第一天
1.1 版本控制:是一种记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况的系统。
本地版本控制系统:一开始大多采用某种简单的数据库来来记录文件的历次更新差异。其中最流行的一种叫RCS,它的工作原理是在硬盘上保存补丁集(补丁是指文件前后的变化),通过应用所有的补丁,可以重新计算出各个版本的文件内容。
集中化的版本控制系统:Centralized Version Control System CVCS
目的:让在不同系统上的开发者协同工作。
例如:CVS,Subversion,Perforce 它们都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。--多年来,这已成为版本控制系统的标准做法。
优点:相比老式的本地VCS来说,每个人都可以在一定程度上看到项目中的其他人正在做什么,管理员也可轻松掌控每个开发者的权限,并且管理一个CVCS要远比在各个客户端上维护本地数据库来得更容易。
缺点:主要来自于中央服务器的单点故障,如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。而且如果整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
分布式的版本控制系统:Distributed Version Control System DVCS
例如:git,Mercuial,Bazaar,Darcs等
特点:客户端并不只提取最新版本的文件快照,而是把代码仓库完整的镜像下来,这样任何一处协同工作的服务器发生故障的时候,都可以用任何一个镜像出来的本地仓库恢复。因为每一个克隆操作,实际上都是一次对代码仓库的完整备份。
1.2 git简史
1991-2002 Linux内核维护工作大部分都花在提交补丁和保存归档的繁琐事务上
2002-2005 启用分布式版本控制系统BitKeeper
2005年,开发BitKeeper的商业公司同Linux内核开源社区结束合作关系,Linus Torvalds开始开发自己的版本系统
开发目标:1.速度 2.设计简单 3.允许众多并行开发的分支 4.完全分布式 5.有能力高效管理类似于Linux内核一样的超大规模项目 即速度快,规模大。
1.3 Git基础
git和其他版本控制系统的差别:git对待数据的方法
其他:以文件变更列表的方式存储信息,将它们保存的信息看做是一组基本文件和每个文件随时间逐步累积的差异。
git:
a.把数据看做是对小型文件系统的一组快照,每次你提交更新,或在git中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。git对待数据更像是一个快照流。
b.近乎所有操作都在本地执行,在没有联网的情况下一样能完成大部分工作。
c.git保证完整性,gi所有数据在存储前后计算校验和,然后以校验和引用。不能在git不知情的情况下更改任何文件或目录内容。这个功能构建在git底层,能够及时发现在传送过程中丢失信息或损坏文件。
//Git用以计算校验和的机制叫做SHA-1 散列(hash 哈希)。这是一个由40个十六进制字符组成字符串,基于Git中文件的内容或目录机构计算出来的。Git数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。
d.git一般只添加数据,用户执行的git操作,几乎只往git数据库中增加数据,很难让git执行任何不可逆操作,或者让它以任何方式清除数据。
三种状态:
1.已提交 committed 表示数据已经安全的保存在本地数据库中(Git仓库)
2.已修改 modified 表示修改了文件,但还没有保存到数据库中
3.已暂存 staded 表示对一个已修改的当前版本做了标记,使之包含在下次提交的快照中
三个概念:
1.Git仓库:用来保存项目的元数据和对象数据库的地方,这是Git中最重要的部分,从其他计算机克隆仓库时,拷贝的就是这里的数据。
2.工作目录:是在项目的某个独立版本提取出来的内容,这个从Git仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或者修改。
3.暂存区域:是一个文件,保存了下次要提交的文件列表信息,一般在Git仓库目录中,有时也被称作索引,不过一般说法还是叫暂存区域。
Git工作流程
1.在工作目录中修改文件
2.暂存文件,将文件的快照放入暂存区域
3.提交更新,找到暂存区域的文件,将快照永久性存储到Git仓库目录中。