- A+
以下为pdf的内容概述,更多详细内容请下载该pdf
什么是版本控制
版本控制系统(Version Control System,简称VCS)是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做唯一的好处就是简单,但是特别容易犯错。有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。
• 本地版本控制系统
• 集中式版本控制系统
• 分布式版本控制系统
本地版本控制系统
例如RCS,现今许多计算机系统上都还看得到它的踪影。甚至在流行的 Mac OS X 系统上安装了开发者工具包之后,也可以使用 rcs 命令。它的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。
本地版本控制系统解决了版本的管理问题,再也不用时不时的把工程目录,通过手工拷贝的方式来存档了。但本地版本控制系统的缺点:
• 无法解决多人协作的问题。
集中式版本控制系统
集中式版本控制系统(Centralized Version Control Systems,简称 CVCS),诸如 CVS、Subversion(SVN)以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。
有一个集中管理的服务器,所有开发人员通过客户端连到这台服务器,取出最新的文件或者提交更新。管理员可以掌控每个开发者的权限。
集中化的VCS不但解决了版本控制问题,还可以多人协作。但缺点也是有的,就是太依赖于远程服务器,CVS服务器宕机后,会影响所有人的工作。版本记录只保存在一台服务器上,会有数据丢失风险。
分布式版本控制系统
分布式版本控制系统(Distributed Version Control System,简称 DVCS),像 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。你就可以在同一个项目中,分别和不同工作小组的人相互协作。你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。
分布式系统并没有"中心服务器"的概念,所谓的"Git服务器",也同每个人的电脑一样,只是为了多人协作时,方便大家交换数据而已。
Git是什么
Git是目前世界上最先进的分布式版本控制系统(没有之一)
好不好用,看看它的开发者是谁就知道了:Linux之父 Linus Torvalds
小历史: Linux内核社区原本使用的是名为BitKeeper的商业化版本控制工具,2005年,因为社区内有人试图破解BitKeeper的协议,BitMover公司收回了免费使用BitKeeper的权力。Linus原本可以出面道个歉,继续使用BitKeeper,然而并没有。。。Linus大神仅用了两周时间,自已用C写了一个分布式版本控制系统,于是Git诞生了!
为什么要使用Git
Git相比SVN有什么优势呢?
学习路径
Git的工作原理
记录文件整体快照
Git和其他版本控制系统的主要差别在于:
• Git只关心文件数据的 整体 是否发生变化
• 而大多数其他系统则只关心 文件内容 的具体差异
大多数操作都在本地执行
时刻保持数据完整性
多数操作仅添加数据
文件的三种状态
文件的三种状态
.git目录
.gitignore文件
三大区域
创建版本库
创建版本库
在目录中创建新仓库
从已有的仓库克隆
版本库基本操作
检查当前文件状态
检查当前文件状态
跟踪新文件
提交更新
提交更新
查看历史
撤销操作
远程仓库
从远程仓库抓取数据
推送数据到远程仓库
分支
为什么要使用分支
创建分支
切换分支
Git 常用命令
Git对比Svn
工作流对比
svn模式
• 从服务器下载最新代码
• 写代码。
• 从服务器拉回服务器的当前版本库,并解决服务器版本库与本地代码的冲突。
• 将本地代码提交到服务器。
设计实现对比
SVN采用集中式实现
集中式的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
缺点:中央服务器的单点故障。
若是宕机一小时,那么在这一小时内,谁都无法提交更新、还原、对比等,也就无法协同工作。如果中央服务器的磁盘发生故障,并且没做过备份或者备份得不够及时的话,还会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录
Git采用分布式实现
在分布式版本控制系统中,开发人员从中心版本库/服务器上克隆代码时,会将原始的代码仓库完整地镜像下来,在自己的机器上,克隆一个跟中心版本库一模一样的本地版本库。
所以不用担心断网情况下无法提交代码。
分支管理
在版本管理里,分支是很常使用的功能。在发布版本前,需要发布分支,进行大需求开发,需要 feature 分支,大团队还会有开发分支,稳定分支等。在大团队开发过程中,常常存在创建分支,切换分支的需求
• Git 分支是指针指向某次提交,而 SVN 分支是拷贝目录。这个特性使 Git 的分支切换非常迅速,且创建成本非常低
• Git 有本地分支,SVN 无本地分支。在实际开发过程中,经常会遇到有些代码没写完,但是需紧急处理其他问题,若我们使用 Git,便可以创建本地分支存储没写完的代码,待问题处理完后,再回到本地分支继续完成代码。