你好,我是江潮
你有没有遇到过这种情况:
在开发项目的时候,我们会不断地去修改代码,但是有时候会遇到,想查看某一时间的代码这种情况,如果没有版本控制器,你可能需要不断地定时备份代码,但这样显然是很麻烦的,而且备份也不一定好用。
比如某个时间点并没有修改代码,那么备份就重复了;再比如虽然备份了代码,但你并不知道两个版本有什么区别。
在这种情况下,一些工程师尝试开发代码版本控制器系统;每次当你修改完代码想进行备份时,只需要输入简单的命令,版本控制系统便会帮你完成备份操作;
就这样两种截然不同的版本控制器诞生了!
- 中央版本控制系统
中央版本控制系统必须存在两个端,服务端和客户端,当进行代码备份时,客户端会向服务端发出请求,并将此次修改的内容发送到服务器当中去;服务端收到请求后,会将代码存储在服务器当中
同样当客户端想查看某一个版本的修改内容或者想恢复到某一个版本之时,客户端也会发送请求到服务端,服务在端接收到请求之后会做出相应的处理并返回给客户端。
从图中可以看到当提交代码时候,两个客户端都是把数据推送服务器当中去,拉取的时候代码也都是从服务器中获取,可以看出这是非常典型的 C/S 机制;张三和李四的交互都必须通过中央服务器,不能私下直接访问。
- 分布式版本控制系统
分布式版本控制器,主要是将备份的代码以及记录完全独立在本地存储,比如说上面提到,当你想将代码恢复到某一个版本的时候,本地版本控制器,不需要依赖网络便可以完成此操作,因为本地版本控制器拥有完整独立的控制系统。
从图中可以看出,张三和李四不仅仅可以向服务器推送代码,服务器也可以向客户端推送代码;并且张三和李四还可以互相推送代码,同样拉取代码也可以从任意一个节点中拉取,而不必从服务器中拉取。
所以从分布式版本控制系统本身的功能来说,它们是完全平等的,每一个系统都拥有全部的功能;但在实际的工作中我们为了更好地管理代码版本,会人为设置一些规则来限制代码推送,所以在图中的红色线条通常是不会使用的,另外服务端通常也不会去主动向客户端推送和拉取代码。
在了解了这些基本知识之后,我们今天的主角就该登场了。
GIT
其实目前主流的版本控制系统主要有Git和S