git与svn的区别-小结一下

1)Git是分布式的,SVN不是:
这 是GIT和其它非分布式的 版本控制系 统,例如SVN,CVS等,最核心的区别。好处是跟其余同事不会有太多的冲突,本身写的代码放在本身电脑上,一段时间后再提交、合并,也能够 不用联网在本地提交;GIT并非目前第一个或惟一的分布式版本控制系统。还有一些系统,例如Bitkeeper, Mercurial等,也是运行在分布式模式上的。但GIT在这方面作的更好,并且有更多强大的功能特征。
 
GIT跟SVN同样有本身的 集中式版本库或服务器。但,GIT更倾向于被使用于分布式模式,也就是每一个开发人员从中心版本库/服务器上chect out代码后会在本身的机器上克隆一个本身的版本库。能够这样说,若是你被困在一个不能链接网络的地方时,你仍然可以提交文件,查看历史版本记录,建立项 目分支等。
 
2)GIT把内容按 元数据方式存储,而SVN是按文件:
全部的资源控 制系统都是把文件的元信息隐藏在一个相似.svn,.cvs等的文件夹里。 若是你把.git目录的体积大小跟.svn比较,你会发现它们差距很大。因 为,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上全部的东西,例如标签,分支,版本记录等。
 
3)GIT分支和SVN的分支不一样:
分支在SVN中一点不特别,就是版本库中的另外的一个目录。若是你想知道是否合并了一个分支,你须要手工运行像这样的命令svn propget svn:mergeinfo,来确认代码是否被合并。 然而,处理GIT的分支倒是至关的简单和有趣。

Git鼓励分Branch,而SVN,说实话,我用Branch的次数还挺少的,SVN自带的Branch merge我还真没用过,有merge时用的是Beyond Compare工具合并后再Commit的;git

4)GIT没有一个全局的版本号,而SVN有:github

目前为止这是跟SVN相比GIT缺乏的最大的一个特征。算法

5)GIT的内容完整性要优于SVN:服务器

GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时下降对版本库的破坏。网络

6)Git下载下来后,在本地没必要联网就能够看到全部的log,很方便学习,SVN却须要联网; 数据结构

7)SVN在Commit前,咱们都建议是先Update一下,跟本地的代码编译没问题,并确保开发的功能正常后再提交,这样其实挺麻烦的,有好几回同事没有先Updata,就Commit了,发生了一些错误,耽误了你们时间,Git可能这种状况会少些。分布式

 

其余区别:

1。速度: svn

克隆一份全新的目录,以一样拥有五个(才五个)分支来讲,SVN是同时复製5个版本的文件,也就是说重复五次一样的动做。而Git只是获取文件的每一个版本的 元素,而后只载入主要的分支(master)。在个人经验,克隆一个拥有将近一万个提交(commit),五个分支,每一个分支有大约1500个文件的 SVN,耗了将近一个小时!而Git只用了区区的1分鐘!

2。版本库(repository):工具

据我所知,SVN只能有一个指定中央版本库。当这个中央版本库有问题时,全部工做成员都一块儿瘫痪直到版本库维修完毕或者新的版本库设立完成。 学习

而 Git能够有无限个版本库。或者,更正确的说法,每个Git都是一个版本库,区别是它们是否拥有活跃目录(Git Working Tree)。若是主要版本库(例如:置於GitHub的版本库)发生了什麼事,工做成员仍然能够在本身的本地版本库(local repository)提交,等待主要版本库恢复便可。工做成员也能够提交到其余的版本库!

3.分支(Branch)
 
在SVN,分支是一个完整的目录。且这个目录拥有完整的实际文件。若是工做成员想要开啟新的分支,那将会影响“全世界”!每一个人都会拥有和你同样的分支。若是你的分支是用来进行破坏工做(安检测试),那将会像传染病同样。
而 Git,每一个工做成员能够任意在本身的本地版本库开啟无限个分支。举例:当我想尝试破坏本身的程序(安检测试),而且想保留这些被修改的文件供往后使用, 我能够开一个分支,作我喜欢的事。彻底不需担忧妨碍其余工做成员。只要我不合并及提交到主要版本库,没有一个工做成员会被影响。等到我不须要这个分支时, 我只要把它从个人本地版本库删除便可。无痛无痒。
Git的分支名是可使用不一样名字的。例如:个人本地分支名為testing,而在主要版本库的名字实际上是master。 最值得一提,我能够在Git的任意一个提交点(commit point)开啟分支!(其中一个方法是使用gitk –all 可观察整个提交记录,而后在任意点开啟分支。)
 
4.提交(Commit)

在SVN,当你提交你的完成品时,它将直接记录到中央版本库。当你发现你的完成品存在严重问题时,你已经没法阻止事情的发生了。若是网路中断,你根本没办法提交!

而Git的提交彻底属於本地版本库的活动。而你只需“推”(git push)到主要版本库便可。Git的“推”实际上是在执行“同步”(Sync)。

 
5.从新设立起点(Rebase)
 
我没在SVN尝试过,不知道有没有这样的功能。
在 Git, 若是你想把别人的最新提交设立為如今这个分支的起点,只要执行git rebase branch_name 便可。这个和合并(merge)不一样点是,merge会依据修改的时间视為最新,而Rebase会要求你去解决双方都有修改过的地方的矛盾 (conflict)。
 
6.系统档案

SVN会在每个目录置放一个.svn。若是想移除这些.svn是很累的。

而Git会在目录起点拥有一个.git目录,以及.gitignore。

 
对我而言,管理一个Git 的版本库是很容易的事。
 

补充:
git优势
  • git每台电脑都有一个版本库,能够在本地作版本管理;
  • 速度快。git的速度远超大部分版本管理系统,包括svn
  • 强大的分支管理功能
  • 活跃的开源社区,如最著名的github

git 缺点

  • Git 没有严格的权限管理控制,通常经过系统设置文件读写权限的方式来作权限控制。
  • 工做目录只能是整个项目。好比 checkout,建分支,都是基于整个项目的。而 svn 能够基于项目中的某一个目录
相关文章
相关标签/搜索