合并对提交过程的保留
Git
: 合并操作保留原有的提交过程(即保留了合并来源的作者、提交次数、分离提交的内容)。SVN
: 合并操作把来源多个提交合并成了一个合并提交,即在提交历史中Crash了自然的提交过程。保留原有的提交过程,可以无需繁琐追踪历史就方便实现以下目的:
- 跟踪修改过程。
- 自然的提交过程。这极大方便了代码细节演进过程的查看。
- 极大方便查出那行提交是什么时间、谁做出的。svn因为合并Crash了自然的提交过程,要追踪很痛苦。
修正提交
Git
: 可以修正提交。使用功能分支工作流,在自己的分支可以方便修正提交而不会影响大家。
SVN
: 一旦提交就到服务器上,实际使用中就是不能修改。SVN
可以在服务器上修改,因为过程复杂需要权限实际上从不会这样做实际使用中会有误提交的情况(如提交了一个不该提交的日志文件),对于svn来说,就是让大家一遍又一遍看到这个垃圾文件。
没有干净的提交,严重影响了Code Review,增加成本。
另外对于想了解演进过程的同学,垃圾提交影响了了解效果。
廉价好用的本地分支
Git
: 有本地分支SVN
: 无本地分支git可以方便创建本地分支,且瞬间就可以完成创建。由于分支可以是本地的,也就不存在svn目录权限的问题。
可以从想要工作点闪电般创建本地分支,本地实验不确定的修改,创建分支如此之廉价,git推荐创建分支来隔离修改。
更强大智能的合并能力
Git
: 重命名(无论文件还是目录)提交可以合并上文件重命名前的这些文件的提交。SVN
: 重命名(无论文件还是目录)提交后,你本地/或是分支上 有文件重命名前的这些文件的修改或提交,在做合并操作时,恭喜,你会碰上传说中难搞的树冲突!因为惧怕svn树冲突,在包名调整(重命名目录)或类名调整(重命名文件)前,我不得不先向一起开发的组员广播:
- 提交你的修改
- 暂停相关类的修改
- 我开始做调整
等我修改好后,你再开始修改
因为这个过程烦琐,结果就是影响了大家去做这样重构操作的积极性,进而影响项目的代码质量改进
灵活、迅速
打断开发
在开发新功能过程中,突然需要你去修复一个Bug,使用Git,你可以直接 保存贮藏/提交当前改动到本地,然后切换到主分支去修复Bug,之后 弹出贮藏/切换回你原来的分支 继续开发。
小步提交,互不干扰
并行开发过程中各开发人员可以随时多次commit代码且互不影响,最后在merage到主分支,并且能记录所有成员的所有commint记录。SVN只能大量的一次性提交到中心库。
日志查看
Git
: 本地包含了完整的日志,速度极快(并且无需网络)SVN
: 需要从服务拉取。
Github-全球最大的开源社区
全球顶级科技公司纷纷加入 GitHub ,并贡献他们自己的项目代码
Google: https://github.com/google
苹果: https://github.com/apple
Facebook: https://github.com/facebook
Twitter:https://github.com/twitter
微软:https://github.com/microsoft
Square:https://github.com/square
阿里:https://github.com/alibaba
…全球顶级开源项目都优先选择在 GitHub 上开源
Linux:https://github.com/torvalds/linux
Android:https://github.com/owncloud/android
Rails:https://github.com/rails/rails
Nodejs:https://github.com/nodejs/node
Swift:https://github.com/apple/swift
CoffeeScript:https://github.com/jashkenas/coffeescript
Ruby:https://github.com/ruby/ruby
…
本文部分转载自 - SVN 和 Git 在日常使用中的明显差异