(本文参考自《progit》一书)
头一次听说版本控制这个词的时候, 一头雾水, 什么是版本控制? 它是干什么用的?...
起初我理解的词面意思, 是不是对一个软件的版本的控制呢? 如VS2012, Photoshop CS5, QQ2012 beta...这一类的软件版本的控制问题呢?当然我的理解是错误的.
What is version control ?
在Pro Git一书中是这样说的:"Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later."
这时候就有了一个大概的概念,版本控制是用来记录若干文件内容的变化,方便我们回到之前特定的某个状态.(当然版本控制的功能远比这些要复杂的多)
我们可以想到这很类似于我们平时为了防止某个文件被修改后无法找回, 做的最多的是备份这个文件.
版本控制用来做什么的呢?
说白点, 就是历史记录, 可以让你项目之前的状态, 可以清楚的看到整个项目所有内容每次的变更情况.
同时他也能协调不同开发人员之间的协作.
一个简单的例子, 现在假如有2个人A,B.他们同时对一个服务器上的项目PROJ进行开发.A从服务器上下载了项目的最新内容PROJ, B也从服务器上下载了PROJ, 他们同时在自己的计算机上对PROJ进行修改.
A先完成了修改, 并将自己的修改提交到了服务器上,这时服务器上的项目版本是PROJ_A.
B后完成了对PROJ的修改, B在提交的时候, 在版本控制系统下, 就会出错, 因为现在服务器上的版本是PROJ_A, 而他的修改基础是PROJ, 所以他就要从服务器上获取最新的版本PROJ_A, 并且B要能够知道A具体对PROJ进行了哪些修改, 以便将自己的修改内容合并到PROJ_A中, 而A对PROJ的修改, 都会被版本控制系统记录下来, 这时B可以很方便的将自己修改的内容合并到就新的PROJ_A中去, 形成PROJ_AB, 并提交服务器.
有一天B不小心把项目编辑错乱了,并提交到了服务器,这时可以通过版本控制系统很方便的恢复到B提交之前的版本.版本控制可以清晰地记录每一次,每一位开发者对项目进行的修改.方便管理员查看项目进度.
github是分布式版本控制系统,那什么又是分布式的版本控制系统(Distributed Version Control System)呢?
先说说集中式的版本控制系统(Centralized Version Control System), 前面说2个人A, B, 对服务器上的版本进行修改, 就是集中式的版本控制, 这种控制, 需要一台服务器(Central VCS Server), 所有的记录都在服务器上, 开发人员从服务器上下载最新的内容进行修改并提交到服务器.但是如果服务器发生错误, 那整个项目的所有历史记录都将不复存在.
于是分布式的版本控制问世了, 每个开发者从服务器下载的项目中,不仅包含了项目本身,还把所有的项目历史全拷贝了下来, 这样服务器出错后,任何一个开发者所从服务器上拷贝下来的项目, 都能使项目恢复到之前状态.
有点像异地备份的意思, 地区A发生了天灾, 但是在地区B有他的备份, 分布式也有点这个意思, 一旦服务器出了故障, 任何一个客户都可以把自己本地的项目重新上传至服务器,使项目恢复之前状态.
这些大概就是版本控制的入门了.因本人能力有限。