git是分布式版本控制系统,而svn是集中式版本控制系统。
首先要明确集中式与分布式的区别
集中式是早期出现的计算机系统架构方式,工作原理简单讲就是由一台大型主机或者几台主机构成的中心节点,来存储、控制、处理所有的数据。所有访问主机的计算机都只是执行输入输出操作。一旦主机崩溃,系统将无法继续工作。打个比方,人体就是一个集中式处理系统,大脑就是主机,身体的其他部位就是访问主机的用户。我们的所见所闻都要传输到大脑进行处理,得到操作反馈,形成记忆。大脑一旦坏死,人体系统也会停止运作。(当然,人体的处理机制远远没有这么简单)
分布式是计算机不断发展过程中出现的另外一种计算机系统架构。具有以下几个特征:1. 分布性:分布式系统中的多台计算机在空间上随意分布,比如可以分布在不同的城市。2. 对等性:各个计算机之间没有主从关系,既没有控制整个系统的主机,也没有被控制的从机,组成分布式系统的所有节点都是对等的。3. 并发性:多个节点可能会并发的操作一些共享资源。当系统之一的节点崩溃,可以迅速从崩溃节点的副本拷贝一份出来建立新的节点来恢复服务。副本包括数据副本和服务副本,数据副本是指在不同的节点上持久化同一份数据,当某一个节点上存储的 数据丢失时,可以从副本上读取到该数据,这是解决分布式系统数据丢失问题最为有效的手段。另一类副本是服务副本,指多个节点提供同样的服务,每个节点都有 能力接收来自外部的请求并进行相应的处理
而版本控制系统中的集中式和分布式是有区别的
集中式版本控制系统,版本库是集中存储在中央服务器的,每个人电脑上有的是最近一次从服务器获得的新版本。若想针对每个功能做一次说明提交,就只能上传至远程服务器,所以联网才能工作。而且要保证网速。一旦服务器崩溃,将不能提交。如果服务器损坏,将丢失历史提交记录。
分布式版本控制系统没有“中央服务器”的概念,但是为了方便多人协同开发,还是会找一台机器充当“中央服务器”,不过每个人的电脑上都有完整的版本库。在没有网络的情况下可以先提交到本地,再上传到服务器。如果服务器崩溃,可以立即从一个人的电脑上复制一份出来再建一个“服务器”,不会丢失历史记录。