00:00
下边咱们来具体的说一说,版本控制工具呢,应该具备哪些功能啊,咱们来详细的罗列一下,首先第一个呢,就是刚才我们给大家演示的协同修改,很多个人我们能够一起去修改同一个文件啊,在同一个项目里边,你也可以改,我也可以改,我们的修改呢,是并行不悖的啊,这个一般的文件服务器呢,它的文件管理的工具它是做不到的。还有一个呢,是数据的备份,其实呢,我们把每一个历史的记录给他保存起来的时候,作为每一个版本控制过程中的每一个具体版本的时候,其实就已经。达到了备份的效果啊,你一旦我们本地的文件呢,如果丢失了,我们可以从版本控制软件里边呢,取出来对应的这个版本,就恢复了本地的这个文件了,诶。所以说它不仅不不仅仅是保存目录和文件的当前状态,还能够保存每一个提交过的历史状态啊,这个是版本控制工具它强大的地方。
01:02
还有一个是版本管理啊,那你版本控制工具肯定得能够去管理迭代过程中的每一个版本了,呃,这个时候呢,我们说你版本在迭代,迭代的过程当中呢,一定是有重复的数据的,我们要做到不保存这些重复的数据啊,因为没有必要啊,我们要呃不保存这些重复的数据,节约存储空间,提高这个运行的效率,这方面呢,我们SVN为代表的集中式版本控制工具和我们get哈,它采取的策略不一样,SV呢采取的是增量式的管理的方式。就是我每次只保存有修改的那一点点,你做的改动我给他保存起来啊,然后呢,你要这个文件的时候呢,我再跟他之前的状态给它拼起来,就是最新的,这是SV是这样去做的。而这个get呢,它采取的是对文件系统呢进行快照,诶我每次呢,保存的是这个文件系统的一个快照啊,这个我们在后边呢,会还会进一步呢,详细的去给大家去介绍啊,这这个时候我们就看到了SV和get呢,他在这个内部的工作机制方面呢,是有很大区别的。
02:07
然后下一个呢,我们说每一个版本控制工具哈,它都需要能够进行权限的控制。啊,你团队中参与开发的这些人呢,不能够所有人都对所有的资源呢,有所有的权限啊,这样的话不加任何限制,这个是很危险的,诶比如说呢,我们测试人员呢,就应该有一个只读的权限啊,开发人员呢,对你负责的模块有读写的权限等等,这个呢,在我们SV里边呢,是有这个比较详细的这个设置的,而这个在我们这个GI里边呢,呃,它采取的方法呢,更简洁。另外呢,Getate还有一个独特的功能,这个是SV没有的,就是如果有团队外的开发者向我们贡献代码,诶,我们get呢,能够进行审核。而我们这个SN的话呢,他就不能够接接受没有授权的人提供的代码,诶你要么就在我授权范围内,要么就没有授权啊,他这个界限是非常清晰的。
03:05
呃,也正是因为这个特点啊,我们这个K呢,能够帮助我们Linux这样的开源社区呢,去管理它代码。啊。下一个呢,我们说历史记录啊,当你把每一个提交的版本呢,都管理起来以后呢,自然就会形成历史记录,我们通过历史记录呢,可以去查看我们修改的人,修改的时间啊,他修改的内容,以及他的日志等等,还能够把本地的文件呢,恢复到某一个历史的状态。最后呢,还有一个分支管理,那么这个分支呢,基本上所有的版本控制工具呢,也都支持分支,但是呢,像GI做的这么优雅,这么简洁啊,应该也是绝无仅有的啊,很难有其他的版本控制工具呢,能够有GI这么用起来这么流畅啊,在做这个分支管理的时候。那么分支呢,它的目的就是允许我们开发团队啊,在开发一个项目的时候,可以有多条生产线同时去推进这个任务,哎,这这些多条生产线呢,多条生产线呢,可能是对应不同的功能啊,也可能是对应这个bug的修复,也可能是对应某些这个不太确定的思路的尝试等等啊这些就是看我们实际的具体工作过程中的实际的需要,总之呢,我们是为了让多个小组能够同时的去工作啊,哎,这个然后呢,去提高效率。
04:26
说到这儿呢,我们说的都是这个工具啊,这个层面的,那么我们进一步抽象的话呢,我们说哈,这个版本控制到底是什么哈,其实版本控制它是一个思想啊,这个这些我们刚才谈到的工具呢,是对这个呃思想的一种这个实现。这个思想最早是从工程设计领域当中呢借鉴过来的啊,你想我们盖一座大桥或者是一栋大楼的时候,你也要去画那个图纸,那么我们设计这个图纸的人员呢,工程人员他们也很难说一次性就把这个图纸设计到位,他们也需要在很多个版本过程中呢,不断的去迭代啊,不断的去改进,才能够最终定案,那在我们it开发过程中呢,也非常的相似,所以我们就把这个理念呢借借鉴过来了。
05:14
呃,实现我们版本控制这个思想的具体的版本控制的工具哈,我们说分成这么两类,一类一类是集中式的版本控制工具,一类是分布式的,这个集中式的版本控制工具呢,有CVS呀,SV呀,VSS等等啊也也有很多,其中呢,现在我们用的最多的呢是SV。这个集中式的版本控制工具呢,它是这么工作的,我们每一个开发人员呢,是一个客户端。然后呢,我们的文件呢和版本的信息哈,是存储在服务器上面的。哎,然后呢,我们跟服务器呢,去进行这个交互,这个集中式的版本控制工具有什么缺点呢?如果我们服务器一旦宕机了,甚至于说服务器如果损坏的话,那么我们所有的历史数据呢,就都丢失了。
06:05
啊,那么我们本机上客户端保存的呢,只是当前的状态,那么你拿这个当前的状态,如果我们重新上传到服务器上呢,那么也就是顶多呢,它就有我们当前的这个数据,他以前的历史呢,版本的历史就都没有了。啊,所以这个时候呢,我们管这种哈,叫做单点故障啊,所以这个集中式的版本控制工具呢,有单点故障的问题。那么我们分布式的版本控制工具呢,就不一样了,就是我们get哈,就以get为例,它是在我们本地就能够去进行这个版本控制的,每一个开发人员在你的电脑上面呢,自己的本地哈,就能够进行完整的版本控制,也就是说呢,你本地就有完整的历史啊,你提交过的所有的版本的历史呢,在你本地呢,都有存储,哎,那么这个时候呢,我们看这个图哈,就是说呢,你任何一个人都可以把你的数据呢去传给别人。
07:01
所以说呢,这个这样的话就很好的避免了单点故障,哎,你张三的数据丢失了,没关系,我拿李四的数据呢去恢复一下。啊,这个我想啊,大家还是很容易理解的,当然我们在这需要说一句哈,这个giate呢,它能够做到我们本地的这个getate里边叫本地库哈,他本地库之间的互相去传这个数据呢,他能做到,但是呢,我们不太建议这样做啊,常规来说呢,他也不是这样去做的,他还是需要有一个远程库。嗯,诶,我们后边呢,会给大家去介绍这个get的,呃,工作的这个结构啊呃,但是在这呢,我们就是让大家先有这样一个感受,就是分布式的版本控制工具哈,比集中式的版本控制工具首要的一个优势就在于它能够避免单点故障啊,大家先有这样一个概念。
我来说两句