git 与 svn 对比
git的使用不需要联机
SVN集中式版本控制:每个人的版本都是提交到服务器,服务器坏了就雪崩。
git分布式版本控制: 安全,每人本地有个版本库,每个人都可以充当‘服务器
它的使用流程不需要联机,可以先将对代码的修改,保存在本机。等上网之后,再实时推送过去。
提交代码,查看日志,推送具有闪电般的速度
git
提交是个本地操作,相对svn
闪电一般。
本地包含了完整的日志,无需网络
git向远程服务器推送提交内容相比svn更快
每个git存储库只有一个git目录
和 SVN不同,一个Git项目一般只在项目的根目录下建一个“.git”目录,而SVN则会在项目的每一个目录下建一个”.svn”目录
git项目移植更方便
Git把所有的历史提交信息全部存储在“Git目录”里,它就是一个Git项目的仓库;你对本地的源代码进行编辑修改后创建的提交也都会先保存在这里面,然后再推送到远端的服务器。当我们我把项目目录和“Git目录”一起拷到其它电脑里,它能马上正常的工作(所有的提交信息全都保存在Git目录里);甚至可以只把“Git目录”拷走也行,但是要再签出(checkout)一次。
git支持tag属性
svn
在模型上是没有分支和tag
的。tag
是通过目录权限限制(对开发只读)来保证不变。
git
模型上支持tag
,保证只读。
合并对提交过程的保留
git
:合并操作保留原有的提交过程(即保留了合并来源的作者、提交次数、分离提交的内容)。
svn
:合并操作把来源多个提交合并成了一个合并提交,即在提交历史中Crash了自然的提交过程。
更强大智能的合并能力
git
:重命名(无论文件还有目录)提交 , 可以合并上文件重命名前的这些文件的提交。
svn
:重命名(无论文件还有目录)提交后,你本地/或是分支上 有文件重命名前的这些文件的修改或提交,在做合并操作时,恭喜,你会碰上传说中难搞的树冲突!
因为惧怕svn
树冲突,在包名调整(重命名目录)或类名调整(重命名文件)前,我不得不先向一起开发的组员广播:
- 提交你的修改
- 暂停相关类的修改
- 我开始做调整
- 等我修改好后,你再开始修改
廉价好用的本地分支
git
:有本地分支
svn
:无本地分支
git
可以方便创建本地分支,且创建分支的时间是O(1)
,即瞬间就创建好了。由于分支可以是本地的,也就不存在svn
目录权限的问题。
git能保证数据的完整性
git中所有数据在存储前都计算校验和,然后以校验来引用,所以你在传输中丢失文件,git都知道。具备断点续传功能。
缺点
(1)git的入门,稍微有点麻烦,需要在本机创建一个ssh的钥匙。
(2)图形化操作界面不及svn那么好用
git和github的关系
git是一个非常强大的版本管理工具。github则是一个基于git的日益流行的开源项目托管库。
Git把所有的历史提交信息全部存储在“Git目录”里,它就是一个Git项目的仓库;你对本地的源代码进行编辑修改后创建的提交也都会先保存在这里面,然后再推送到远端的服务器。当我们我把项目目录和“Git目录”一起拷到其它电脑里,它能马上正常的工作(所有的提交信息全都保存在Git目录里);甚至可以只把“Git目录”拷走也行,但是要再签出(checkout)一次。