因为最近公司在更换源代码管理工具,所以在此对git和svn进行了对比
1.Git和SVN一样都有自己的集中式版本库或者服务器。每个开发者会从版本库或者服务器check out代码到本地,会在本地克隆一个和中心版本库一模一样的本地版本库,所以再也不用担心断网了没办法提交代码了。
2.克隆代码:git会比svn快很多(在svn上克隆UI的文件,花了10分钟,不知道是网络的导致还是怎么了)
3.对比历史版本:svn需要联网才能看到历史版本对比,git不需要,因为git在本地保存着当前项目的所有历史更新。如果需要看N个版本之前的代码对比,git会去取出N个版本之前的代码和当前的代码进行对比
4.提交代码:svn需要在联网的情况下才能提交代码,git不需要,git是先commit到本地仓库,然后在有网的时候再push到服务器
5.分支:上面的一些区别主要是在没有网络情况下git会比svn有优势,但是呢,在公司办公的话没有网络或者服务器断电的情况还是比较少的。来了解下git和svn最重要的区别:分支
在svn上:分支是一个完整的目录,而且这个目录拥有完整的实际文件。A开启了分支,Bupadate的时候也会拥有A一样的分支,如果A改坏了分支,那么B也就得重新切分支重新下载。
而且如果想知道是否合并了一个分支,需要手动运行像这样的命令svn propget svn:mergeinfo,来确认代码是否被合并。
git:在本地版本库可以切换想要的分支,只要不提交到主要的版本库,就不会影响到其他的伙伴。
举个:1.0版本已经提交上线,主分支上建立分支A开发2.0的版本,突然1.0版本有生产问题,那么就可以切回到主分支,在主分支建立一个新的分支B,在B分支修复生产问题,等待测试通过,会到主分支,并将B分支合并过来,push到远程仓库。再切换到之前开发阶段的A分支,这样就可以保证开发进度不会受到影响。
实际上svn和git两个合并在提交到远程服务器上的操作是一样的,有冲突改冲突,没有冲突自动合并。git的便捷在于有本地仓库,轻松的建立分支,非常容易的切换分支,也不会影响到其他的伙伴。别人提交到主干的东西合并到自己的分支来。这样做的好处在于冲突不会太多,然后将自己改好的功能分支合并到主干。
git相对于svn的缺点:
1.学习成本:现在公司使用的代码管理工具是svn,所以如果切换到git还是需要一定的学习成本的
2.跨平台:查资料说对windows的用户不太友好,但是问过周边使用过git的用户,也有图形化使用工具,用法和svn差不多,具体如何还有待考证
3.对于技术来说,可能Git比较好用,但是对于其他的同事来说,使用git去管理文件体验不太好。咨询过周围的测试还有设计,都是使用svn。开发用git比较多。
4.权限管理:svn的权限管理相当严格,按照组、个人某个目录都有权限控制,git没有严格的权限管理,没有任何的保护机制。
总结:
1.站在个人的角度来说,比较喜欢用git,因为会很方便的管理代码,当有线上问题的时候,或者某一个版本未上线正在测试阶段,进行下一个版本的开发,会感觉很方便。
2.从公司的角度出发,建议使用svn,因为我们现在的项目并不多,同时迭代版本好像也不多,没有很高频次的协同合作,所以对于技术来说svn是够用的,当然不排除以后公司的快速发展是需要协同合作,多个迭代同时进行的。上面也提到过对于非技术人员来说git的用户体验不太好,但是具体如果还有待考察。