集中式(SVN) | 分布式(Git) | |
是否有*服务器 | 有。开发人员需要从*服务器获得最新版本的项目然后在本地开发,开发完推送给*服务器。因此脱离服务器开发者是几乎无法工作的 | 没有*服务器,开发人员本地都有 Local Repository |
网络依赖 | 必须要联网才能工作,而且对网络的依赖性较强,如果推送的文件比较大而且网络状况欠佳,则提交文件的速度会受到很大的限制。 | 分布式在没有网络的情况下也可以执行commit、查看版本提交记录、以及分支操作,在有网络的情况下执行 push 到 Remote Repository。 |
文件存储格式 | 按照原始文件存储,体积较大 | 按照元数据方式存储,体积很小 |
是否有版本号 | 有 | 没有 |
分支操作的影响 |
创建新的分支则所有的人都会拥有和你一样的分支 |
分支操作不会影响其他开发人员 |
提交 | 提交的文件会直接记录到*版本库 | 提交是本地操作,需要执行push操作才会到主要版本库 |
以 Git 和 SVN 为例,分布式和集中式版本控制系统的特点:
图片来源:廖雪峰的官方网站
git
- 适合分布式开发,强调个体。
- 公共服务器压力和数据量都不会太大。
- 速度快、灵活。
- 任意两个开发者之间可以很容易的解决冲突。
- 离线工作。
- 资料少
- 学习周期相对而言比较长。
- 不符合常规思维。
- 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
图片来源:廖雪峰的官方网站
SVN
- 管理方便,逻辑明确,符合一般人思维习惯。
- 易于管理,集中式服务器更能保证安全性。
- 代码一致性非常高。
- 适合开发人数不多的项目开发。