版本控制
什么是版本控制
版本控制是一种记录一个文件或若干文件内容变化,以便将来可以 查阅特定版本的修订情况 的系统
为什么要用版本控制
版本控制可以将某个文件回溯到过去的某个状态,甚至可以将整个项目都回退到过去
集中式的版本控制系统
常用的集中式版本控制系统如:CVS、svn 以及Perforce
定义
集中式的版本控制系统都有一个单一的集中管理的服务器用来保存所有文件的修订版本;协同工作的人们通过客户端来连接这台服务器从而取出最新文件或提交更新
优点
- 项目中的每一个人都可以看到其他人在做什么
- 管理员也可以轻松掌握各个开发者的权限
管理一个集中化的版本控制系统要远比在各个客户端上维护本地数据库要来的容易的多
缺点
- 服务器的单点故障
服务器宕机一小时,在这一小时内都无法提交更新也就无法协同工作
并不是说服务器故障了就没有办法写代码了,只是在服务器故障的情况下,编写的 代码是没有办法得到保障的.试想 svn 中央服务器挂机一天.你还拼命写了一天代 码,其中 12 点之前的代码都是高质量可靠的,而且有很多闪光点.而 12 点之后的代 码由于你想尝试一个比较大胆的想法,将代码改的面目全非了.这样下来你 12 点之 前做的工作也都白费了 有记录的版本只能是 svn 服务器挂掉时保存的版本!
要是中央服务器的磁盘发生故障,碰巧没做备份,或者备份不够及时,就会 有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录,而被 客户端偶然提取出来的保存在本地的某些快照数据就成了恢复数据的希望。但这 样的话依然是个问题,你不能保证所有的数据都已经有人事先完整提取出来过。 只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险
分布式的版本控制系统
常见的分布版本控制系统入:Git、BitKeeper等
定义
分布式的版本控制系统不仅仅是提取 最新版本的文件快照,而是把代码仓库完整的镜像下来
任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本 地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份
优点
- 断网的情况下也可以进行开发(因为版本控制是在本地进行的)
- 使用 github 进行团队协作,哪怕 github 挂了 每个客户端保存 的也都是整个完整的项目(包含历史记录的!!!)
集中式和分布式的区别
分布式的版本控制系统在管理项目时 存放的不是项目版本与版本之间 的差异.它存的是索引(所需磁盘空间很少 所以每个客户端都可以放下整个 项目的历史记录)