【转】SVN 与 GIT 详细对比 git和svn的详细对比

 

        近期就【版本管理工具是否进行切换SVN->Git】的问题进行了讨论,于是对svn和Git进行了相关研究,进而梳理出Git的特点(优、缺点),最后将Git与SVN进行了对比,对比结果详见下方内容。(有歧义的地方请评论指出!!!,THANKS)

            版本工具

差异

svn

git

系统

1.集中式版本控制系统(更适用于项目文档管理)

2.更多用于企业内部项目并行开发

1.分布式系统(仅适用于代码管理)

2.更多用于通过开源项目开发

灵活性

1.搭载svn的服务器出现故障,无法与之交互
2.所有的svn操作都需要中央仓库交互(例:拉分支,看日志等)

1.可以单机操作,git服务器故障也可以在本地git仓库工作
2.除了push和pull(或fetch)操作,其他都可以在本地操作
3.根据自己开发任务任意在本地创建分支
4.日志都是在本地查看效率较高

安全性

较差,定期备份,并且是整个svn都得备份

较高,每个开发者的本地就是一套完整版本库,记录着版本库的所有信息(gitlab集成了备份功能)

分支方面

1.拉分支更像是copy一个路径
2.可针对任何子目录进行branch
3.拉分支的时间较慢,因为拉分支相当于copy
4.创建完分支后,影响全部成员,每个人都会拥有这个分支

5.多分支并行开发较重(工作较多而且繁琐)

1.只能针对整个仓库进行branch,一旦删除无法恢复
2.拉分支时间较快,因为拉分支只是创建文件的指针和HEAD
3.自己本地创建的分支不会影响其他人

4.比较适合多分支并行开发

版本控制

1.保存前后变化的差异数据,作为版本控制
2.版本号进行控制,每次操作都会产生一个高版本号(svn的全局版本号)

1.git只关心文件数据的整体发生变化,更像是把文件做快照,文件没有改变时,分支只想这个文件的指针不会改变,文件发生改变,指针指向新版本
2. 40 位长的哈希值作为版本号,没有先后之分

3.git rebase操作可以更好的保持提交记录的整洁

工作流程

1.每次更改文件之前都得update操作,有的时候修改过程中这个文件有更新,commit不会成功
2.有冲突,会打断提交动作(冲突解决是一个提交速度的竞赛:手快者,先提交,平安无事;手慢者,后提交,可能遇到麻烦的冲突解决。)

1.开始工作前进行fetch操作,完成开发工作后push操作,有冲突解决冲突
2.git的提交过程不会被打断,有冲突会标记冲突文件

3.gitflow流程(经典)

内容管理

svn对中文支持好,操作简单,适用于大众

对程序的源代码管理方便,代码库占用的空间少,易于分支化管理

学习成本

1.适用于普通的开发团队,使用起来更方便,成本较低

1.适用于开发者,水平高,更在乎效率而不是易用性,成本较高

权限管理

svn的权限管理相当严格,可以按组、个人针对某个子目录的权限控制

git没有严格的权限管理控制,只有账号角色划分

管理平台

有吧(注意这个“吧”字)

gitlab(建议使用,集成的功能较多,API开发),gerrit,github等

        近期就【版本管理工具是否进行切换SVN->Git】的问题进行了讨论,于是对svn和Git进行了相关研究,进而梳理出Git的特点(优、缺点),最后将Git与SVN进行了对比,对比结果详见下方内容。(有歧义的地方请评论指出!!!,THANKS)

            版本工具

差异

svn

git

系统

1.集中式版本控制系统(更适用于项目文档管理)

2.更多用于企业内部项目并行开发

1.分布式系统(仅适用于代码管理)

2.更多用于通过开源项目开发

灵活性

1.搭载svn的服务器出现故障,无法与之交互
2.所有的svn操作都需要中央仓库交互(例:拉分支,看日志等)

1.可以单机操作,git服务器故障也可以在本地git仓库工作
2.除了push和pull(或fetch)操作,其他都可以在本地操作
3.根据自己开发任务任意在本地创建分支
4.日志都是在本地查看效率较高

安全性

较差,定期备份,并且是整个svn都得备份

较高,每个开发者的本地就是一套完整版本库,记录着版本库的所有信息(gitlab集成了备份功能)

分支方面

1.拉分支更像是copy一个路径
2.可针对任何子目录进行branch
3.拉分支的时间较慢,因为拉分支相当于copy
4.创建完分支后,影响全部成员,每个人都会拥有这个分支

5.多分支并行开发较重(工作较多而且繁琐)

1.只能针对整个仓库进行branch,一旦删除无法恢复
2.拉分支时间较快,因为拉分支只是创建文件的指针和HEAD
3.自己本地创建的分支不会影响其他人

4.比较适合多分支并行开发

版本控制

1.保存前后变化的差异数据,作为版本控制
2.版本号进行控制,每次操作都会产生一个高版本号(svn的全局版本号)

1.git只关心文件数据的整体发生变化,更像是把文件做快照,文件没有改变时,分支只想这个文件的指针不会改变,文件发生改变,指针指向新版本
2. 40 位长的哈希值作为版本号,没有先后之分

3.git rebase操作可以更好的保持提交记录的整洁

工作流程

1.每次更改文件之前都得update操作,有的时候修改过程中这个文件有更新,commit不会成功
2.有冲突,会打断提交动作(冲突解决是一个提交速度的竞赛:手快者,先提交,平安无事;手慢者,后提交,可能遇到麻烦的冲突解决。)

1.开始工作前进行fetch操作,完成开发工作后push操作,有冲突解决冲突
2.git的提交过程不会被打断,有冲突会标记冲突文件

3.gitflow流程(经典)

内容管理

svn对中文支持好,操作简单,适用于大众

对程序的源代码管理方便,代码库占用的空间少,易于分支化管理

学习成本

1.适用于普通的开发团队,使用起来更方便,成本较低

1.适用于开发者,水平高,更在乎效率而不是易用性,成本较高

权限管理

svn的权限管理相当严格,可以按组、个人针对某个子目录的权限控制

git没有严格的权限管理控制,只有账号角色划分

管理平台

有吧(注意这个“吧”字)

gitlab(建议使用,集成的功能较多,API开发),gerrit,github等