美文网首页资源精选程序员工具使用资源点滴
话说Svn与Git的区别(以后别再问我了)

话说Svn与Git的区别(以后别再问我了)

作者: 白袍君 | 来源:发表于2015-07-11 15:20 被阅读102319次

    这篇主要是谈谈两者的区别,至于谁优谁劣看官自己思考吧!

    把第一条理解到位思想到位了做起来才会有的放矢,其他几条都是用的时候才能体会到

       1) 最核心的区别Git是分布式的,而Svn不是分布的。能理解这点,上手会很容易,声明一点Git并不是目前唯一的分布式版本控制系统,还有比如Mercurial等,所以说它们差不许多。话说回来Git跟Svn一样有自己的集中式版本库和Server端,但Git更倾向于分布式开发,因为每一个开发人员的电脑上都有一个Local Repository,所以即使没有网络也一样可以Commit,查看历史版本记录,创建项 目分支等操作,等网络再次连接上Push到Server端。

    从上面看GIt真的很棒,但是GIt adds Complexity,刚开始使用会有些疑惑,因为需要建两个Repositories(Local Repositories & Remote Repositories),指令很多,除此之外你需要知道哪些指令在Local Repository,哪些指令在Remote Repository。

       2)Git把内容按元数据方式存储,而SVN是按文件:因为,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。.git目录的体积大小跟.svn比较,你会发现它们差距很大。

       3) Git没有一个全局版本号,而SVN有:目前为止这是跟SVN相比Git缺少的最大的一个特征。

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

       5) Git下载下来后,在OffLine状态下可以看到所有的Log,SVN不可以。

       6) 刚开始用时很狗血的一点,SVN必须先Update才能Commit,忘记了合并时就会出现一些错误,git还是比较少的出现这种情况。

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

       8) 版本库(repository):SVN只能有一个指定中央版本库。当这个中央版本库有问题时,所有工作成员都一起瘫痪直到版本库维修完毕或者新的版本库设立完成。而 Git可以有无限个版本库。或者,更正确的说法,每一个Git都是一个版本库,区别是它们是否拥有活跃目录(Git Working Tree)。如果主要版本库(例如:置於GitHub的版本库)发生了什麼事,工作成员仍然可以在自己的本地版本库(local repository)提交,等待主要版本库恢复即可。工作成员也可以提交到其他的版本库!

       9)分支(Branch)在SVN,分支是一个完整的目录。且这个目录拥有完整的实际文件。如果工作成员想要开啟新的分支,那将会影响“全世界”!每个人都会拥有和你一样的分支。如果你的分支是用来进行破坏工作(安检测试),那将会像传染病一样,你改一个分支,还得让其他人重新切分支重新下载,十分狗血。而 Git,每个工作成员可以任意在自己的本地版本库开啟无限个分支。举例:当我想尝试破坏自己的程序(安检测试),并且想保留这些被修改的文件供日后使用, 我可以开一个分支,做我喜欢的事。完全不需担心妨碍其他工作成员。只要我不合并及提交到主要版本库,没有一个工作成员会被影响。等到我不需要这个分支时, 我只要把它从我的本地版本库删除即可。无痛无痒。

        Git的分支名是可以使用不同名字的。例如:我的本地分支名为OK,而在主要版本库的名字其实是master。

        最值得一提,我可以在Git的任意一个提交点(commit point)开启分支!(其中一个方法是使用gitk –all 可观察整个提交记录,然后在任意点开啟分支。)

        10)提交(Commit)在SVN,当你提交你的完成品时,它将直接记录到中央版本库。当你发现你的完成品存在严重问题时,你已经无法阻止事情的发生了。如果网路中断,你根本没办法提交!而Git的提交完全属於本地版本库的活动。而你只需“推”(git push)到主要版本库即可。Git的“推”其实是在执行“同步”(Sync)。

    最后总结一下:

    SVN的特点是简单,只是需要一个放代码的地方时用是OK的。

    Git的特点版本控制可以不依赖网络做任何事情,对分支和合并有更好的支持(当然这是开发者最关心的地方),不过想各位能更好使用它,需要花点时间尝试下。

    参考:

        git和SVN的区别 - 生命在于折腾 - 博客频道 - CSDN.NET

        svn - Why is Git better than Subversion? - Stack Overflow 

        2015/7/11 于北京上地下午15:14完   白袍君

    更新一下支持ERC-20Token 打赏  懂得客官关注公众号 币圈司马  只聊技术,不教投资!  

    地址,二维码如下:

    ERC20 Address:  0x8cDCcE7016761e2dB03B24826BFa7b80b36a88Df

    ERC20 Address

    相关文章

      网友评论

      • f6018a171ad6:用过svn和git,感觉git更好
      • 5b131b06b33c:1.svn也可以创建无限分支,没有限制。每个人,可以只用自己的分支,怎么改,也不会影响到别人
        2.svn也可以使用本地仓库,唯一的区别是,本地和中心是各自独立的。
        3.svn快慢和svn的client有关系和svn没关系,楼主提到文件多的时候慢
        4.svn分支的命名也没有什么限制。
        5.svn也可以任意版本创建分支,还可以任意目录创建分支。svn还可以任意目录checkout,提交,导出,修改,这点比git强很多。
        6.一般来说,公司的svn服务器和git服务器都是部署在自己局域网,断网的情况,基本上可以忽略。唯一,就是断网不能提交而以。一般来说,做svn或git的服务器,都会做raid,外加备份,所以基本上不用担心库损坏的问题。
        7.关于svn的update和commit,一般我们都是各自已的工作分支,完成后,才会合并到工作主线,这个git没有什么区别,唯一区别就是一个在本地,一个在中心而以。
        5b131b06b33c:增加了blog:http://blog.csdn.net/zdhsoft/article/details/79474280
        5b131b06b33c:另外:svn有非常灵活的权限管理,可以建立组,可以针对目录分配权限。
      • 爱上我们的微笑:>.......每个分支有大约1500个文件的 SVN,耗了将近一个小时!而Git只用了区区的1分钟!

        这个窘境,谁碰见谁知道,再加上外网资源,很难受。
      • coder_lwj:不是你想用啥,就用啥,看公司要求,都学着用不就好了,何必纠结哪个更好。
      • 9e5251e188f3:windows下开发,确实是svn更好。如果是linux下则是git更好,团队人数越多,开发交叉度越大,git的好处越明显
      • Cappuccino_7f91:评论太片面,带有偏见
        10)提交(Commit)在SVN,当你提交你的完成品时,它将直接记录到中央版本库。当你发现你的完成品存在严重问题时,你已经无法阻止事情的发生了。如果网路中断,你根本没办法提交!而Git的提交完全属於本地版本库的活动。而你只需“推”(git push)到主要版本库即可。Git的“推”其实是在执行“同步”(Sync)。
        -----------这里,SVN提交后断网,等网络好了再提交下就好了,而GIT你只在本地活动,别人没法同步你的代码,你也没法同步到主服务器,就算同步了也可能断网,断网后你也没法同步了,也没法阻止严重错误的发生,我觉得并没有什么区别,只是GIT多了个提交到本地,但是在我看来,都是本地,干嘛要提交?自己提交给自己有意义吗?
        91711128d8cb:我觉得这跟版本库的使用要求有关。我这的要求无论用svn还是git,每次commit都应该是提交一个需求(改一个bug或者添加一个新的功能)。但在断网的时候,svn是无法提交的。
        白袍君:建议你仔细尝试下,然后在反驳!不要为了反驳而反驳,断网了使用什么工具都提交不了,而git是让你记录自己的提交log,而不是简单的只是为了提交代码,一点拙见!
      • gznbl:萝卜白菜,各有所爱,够用就好啦。
      • 大斌小姜:第一年用SVN;第二、三年转用Git时刚开始比较难理解,用习惯了后感觉对于开发来说真的很好用;第四年来新公司用的是svn用了半年,准备还是转成Git。感觉两者各有优劣,对于开发来说,我感觉Git好用一点。
      • 你好Max:看完后发现大部分文字都在贬低SVN,拔高Git,其实差距并没这么大,各有优点。
        你写的很多内容,部分比较不是很合理,带有严重的左倾错误。

        不过对于想学习git的同学或者偏向git的同学,这倒是不错的文章。
      • 简萧一:git 的不同分支,如develop,release,master,hotfix ,可以自动识别差异,自动合并吗
      • Karos_凯:git 的优势是git flow,在不同的时间段会存在不同的branch去做该做的事情,开发测试发布流程清晰,速度也更快,不像svn都是文件拷贝,而git是基于元数据是维护代码,你会发现git的占用空间很小。
      • ab0aecc94dad:SVN我也用过五年了,GIT也用过,各有优劣,作为比较,应该客观真实,而不能带有强烈的感情色彩,不能说GIT全是优点,而SVN就是“狗血”,SVN的设计人员是NC?恰恰说明了你对SVN认识和理解的不足,你去调查下,问问同行朋友,调查下中国的上市IT公司里面用GIT的多还是SVN的多
        9e5251e188f3:@blushi 原因是中国的大部分程序员都是用win开发的,国外则是linux和mac。svn在windows下比git方便很多。svn的目标也是这群windows用户
        fa4aa65d77a6:放眼全球,在外国git用的多,莫名其妙,在中SVN居然居多
        f312a9b0f01d:同意你说的前部分,但是用户数并不能完全说明Git好还是SVN好
      • 新地球说着一口陌生腔调:表示在公司还未用git
      • tinysilk:一直只用git,没用过svn,讲道理的话觉得除了上面的悲观锁之外其它方面或者持平,或者比svn强,不过有一点很重要,svn一大帮老家伙以前用,至于老家伙的话,学新东西不都是挺困难的么?你们说呢?
      • 4f61b63e0115: @白袍君 搜噶~~~
      • 白袍君: @邾小漫 如果习惯了git,对于搞开发的还是git更好一点
      • 4f61b63e0115:说明还是Git更优,是吗?
      • 白袍君: @MySherry thank u,加油
      • 6b8f341ce5e8:👍👍👍
      • MySherry:支持。总算了解一些区别了。
      • 煜寒了:支持👍
      • dc072ff008a6: @玉公子 谢谢,取自一个成语,高中开始就喜欢了
      • 857c10c992e9: @苏瑾瑜 名字挺不错
      • 857c10c992e9:外行看热闹的
      • 81559b56bcec:用svn的路过…
      • 破东风CAFEBABY:现在在用git,感觉有点不习惯,而且如果协作的人不是特别多的话,git的优势也发挥不出来
      • 白袍君: @苏瑾瑜 现在我用的也是git
      • 白袍君: @简猫 收到,嘿嘿
      • 简猫:来手动支持!!!
      • dc072ff008a6:虽说各有各的优势,但我个人比较偏爱git
      • EsL7RE:写得挺好。但是,如果有人问这样的问题,他应该在提问之前,自己去寻找答案。
      • mars2639:用过Git的都说好
        26f30aca5431:@漂泊_空气 打广告也不给钱
        1114329096b0:@mars2639 感觉你在打广告。哈哈
      • 白袍君: @Michael_Fu 各有各的优势
      • 傅简书:看过好多svn比git差,用着发现,其实svn也没至于那么差吧。
        everfight:@Michael_Fu 够用就好,主要还是为了解决实际问题。
      • f8c4dbd58574:linux系的偏向git.

      本文标题:话说Svn与Git的区别(以后别再问我了)

      本文链接:https://www.haomeiwen.com/subject/nsruqttx.html