- Git:分布式的(Decentralized)版本控制软件
- SVN:中心化的(Centralized)版本控制软件
Git
- 优点:
- 去中心化
- 避免单点故障(服务器下线)导致Repo无法访问;
- 不需要服务器也可完成大多数功能;
- 可以用本地Git Repo初始化服务器上的Git Repo;
- Merge/Rebase流程完善
- 缺点:
- 学习曲线陡峭,非计算机专业人士入门困难;
- 即使有Git LFS,Git对大文件的支持仍然一般;
- 权限控制粒度不细
- 一个用户能访问Repo,就能访问Repo中的所有文件和历史;
- 一个用户Clone了完整的Repo,就能将它放到某个Git服务器上开始分析和分发;
SVN
- 优点
- 原生支持大文件版本管理,性能高;
- 功能简单直接,入门难度低;
- 与Git的正向Delta不同,SVN采用反向Delta,降低存储占用、提升拉取性能;
- SVN本体十分稳定,更新及出现安全问题概率低,有利于进行二次开发;
- 权限控制完善
- 支持用户名+密码、用户名+令牌(Token)、LDAP等多种不同认证方式的同时,还可结合Web服务器的功能提供更多验证方式;
- 可设置用户和用户组,读写权限可精确到Repo下的单个文件
- 缺点
- 中心化
- 服务器出现问题(单点故障)会导致开发无法继续,或数据(提交历史等)永久丢失;
- 可以改造为“多中心”模式:增加类似“服务器间同步”的功能,或使用特殊的分布式文件系统储存服务端文件;
- 必须有服务器的存在
- 即使是本地Repo进行开发,也要启动SVN Server;
- 失去服务器的情况下操作受限;
- 大量成员共同在单个Repo内开发时,服务器有持续较高负载;