区别
维度 | Git | SVN |
定义 | 是由Linus Torvalds在2005年开发的开源分布式版本控制系统。它强调速度和数据完整性 | 是Apache许可证下的开源软件版本和版本控制系统 |
模型类型 | 是一个分布式模型 | vn是集中式模型,只有一个远程版本库 |
存储单元 | Git按照元数据方式存储,体积很小;所有控制文件在.git中 | SVN按照原始文件存储,体积较大;所有资源控制文件在.svn中 |
是否拥有全局版本号 | 没有 | 有 |
内容完整性 | Git的内容的完整性要优于SVN,GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏 | |
版本库 | Git可以有无限个版本库;如果主要版本库发生了什么事,工作成员仍然可以在自己的本地版本库(local repository)提交,等待主要版本库恢复即可。工作成员也可以提交到其他的版本库 | 只能有一个指定中央版本库,当这个中央版本库有问题时,所有工作成员都一起瘫痪直到版本库维修完毕或者新的版本库设立完成。 |
克隆目录速度 | git要快于svn;获取文件的每个版本的元素,然后只载入主要的分支(master);五个分支,每个分支有大约1500个文件的 SVN,耗了将近一个小时,而Git只用了区区的1分钟! | SVN是同时复制多个版本的文件,,也就是说重复五次同样的动作 |
分支 | 从同一个工作目录下快速的在几个分支间切换 | svn的分支是一个目录;如果你想知道是否合并了一个分支,你需要手工运行像这样的命令svn propget svn:mergeinfo,来确认代码是否被合并 |
创建目录 | 只创建 .git 目录 | 在每个文件夹中创建.svn目录 |
存贮区别 | 大都用于代码管理 | 用于原型图和高保真管理 |
命令比较
作用 | git | svn |
版本库初始化 | git init | svn create |
clone | git clone | svn co(checkout) |
add | git add (.除去.gitignore,*所有的文件) | svn add |
commit | git commit | svn commit |
pull | git pull | svn update |
push | git push | - |
查看工作状态 | git status | svn status |
创建分支 | git branch <分支名> | svn cp <分支名> |
删除分支 | git branch -d <分支名> | svn rm <分支名> |
分支合并 | git merge <分支名> | svn merge <分支名> |
工作区差异 | git differ (-cached / head) | svn diff |
更新至历史版本 | git checkout <commit> | svn update -r <rev> |
切换tag | git checkout <tag> | svn switch <tag> |
切换分支 | git checkout branch | svn switch branch |
还原文件 | git checkout - path | svn revert path |
删除文件 | git rm path | svn rm path |
移动文件 | git mv path | git mv path |
清除未追踪文件 | git clean | svn status sed -e |