其实写这篇文章,是出于最开始我自己对这2者之间也搞不太懂,后来学习使用了git,才明白之间的差距,似乎很小,又似乎完全不同!
上手区别
git上手复杂,明显的分为本地上的操作和与远程一套操作,更不要说团队开发了!
而svn,一开始的目的就很明确的是团队开发,而穷逼往往再Windows上开发,所以svn的图形界面使用也很简单明了(项目库,用户组,用户)!checkout, update ,commit 也是简单好用。
本地是否有一个版本库?
对于git,其本身在本地就是一个版本库,即可以在本地(不联网包括内网)对修改的项目版本进行提交操作,也正是因此,加大了git的复杂程度。
而svn,在处于单机模式下,是完全无法工作的,当你对当前版本做了修改又希望在没网的情况提交时,那么你只能再有网后提交,连接了svn服务端方可提交到服务端版本库。这样的机制,使得svn虽然不能在本地进行提交或者更新版本等操作,却比git的机制更快的与团队版本合并,因为当svn修改后,只能提交到服务端的版本库,而其本地是没有版本库信息的;git则是本地有一个版本库,相当于svn的那个服务端,可以进行无网络提交更新版本库。
那么换种思维,假如我是svn的客户端,我又在自己电脑上也装一个服务端,但这个服务端仅供我自己使用,那么我能一边连接自己的服务端,一边连接远程的中心服务端吗?答案是不能,因为每个与svn版本库关联的目录仅有一个.svn目录,里面仅能记录一套数据,一套服务器,不然当你在改目录下提交时,试问你要如何判断提交至何处呢?就算可以同时提交,在无网络时我提交到自己的服务器,当有网时我则提交到远程服务器,这种机制和git是否非常相似?但其效果却是有些许区别的?区别在哪呢?在于版本库信息,当无网络时,提交的服务端是本地的,此时版本信息存储在本地,如果进行多次提交,那么本地服务端的版本可能已经是4了,而服务器由于仅在有网时提交过2次,所以版本为2,且没有中间缺少版本的日志,也就没有某些版本的改动信息。毫无疑问,git的push是绝对将本地的版本信息推送到了远程的。这点只要多提交几次,再push后,查看github上的提交信息即可清楚。
所以,归根结底git与svn都是版本管理的好帮手,其主要不同点是一个相对简单(svn),一个项目复杂(git);一个是分布式的版本管理工具(git),一个是集中式的版本管理工具(svn)