作为版本控制工作,两者的做大的区别应该在于:Git属于分布式版本控制工具,而SVN属于集中式的版本控制工具。分布式的好处是什么呢?举个例子来说,当你在火车上离线状态下编程工作,在某个阶段会需要先保存正确的代码状态(以便后续出问题时可以回滚),再开始后续的编码,这个时候Git就会发挥它的优势。因为它的分布式特性,可以同时拥有远程仓库和本地仓库,在火车上,即使不联网,也可以将程序的修改commit至本地的仓库,在联网的条件下再push到远程仓库中。而SVN因为是集中式的控制管理,所以它的每一次commit都需要联网提交至服务器端。
除了上面的描述的优势,git还有其他让人喜欢的特点:
- git只在仓库(repo)的根目录下创建.git文件夹,而svn会在每个目录下创建.svn文件夹(会产生更大的记录内容)
- 当你删除或是移动仓库内的某个文件时,git会帮你识别出具体的操作,而svn需要人为的指出
- 程序在编译过程产生的文件,如.pyc,如果不想提交至仓库,git可以在根目录下指定,从而运用到子目录,而svn就不容易做到这一点
现在越来越多的人使用git,它的风头也渐渐盖过了svn,而当我在某游戏公司实习时,却意外发现了svn的优势。前面讲到,git是一种分布式的版本控制工具,支持远程仓库和本地仓库,因此也就增加了使用的复杂性。与远程交互用push/pull,与本地交互用commit/checkout,而且它也缺乏好用的客户端。我们的游戏开发,需要策划、程序员、美术协同工作,虽然程序员接受git的使用相对简单,但是要给策划、美术做培训需要时间、人力的成本,svn以它简单操作的优势,在公司内部盛行。而且,它有一个很好用的客户端:TortoiseSVN