V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
youcanwin8099
V2EX  ›  Subversion

还是 svn 好用,如果不需要创建分支。如果不需要频繁地创建分支, svn 也可以创建分支。 git 在做最简单的提交时,速度太慢了。不是大项目,不要用 git.

  •  
  •   youcanwin8099 · 2019-08-16 10:34:26 +08:00 · 5699 次点击
    这是一个创建于 1936 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1)适用对象不同。Git 适用于参与开源项目的开发者。他们由于水平高,更在乎的是效率而不是易用性。Svn 则不同,它适合普通的公司开发团队。使用起来更加容易。

    2)使用的场合不同。Git 适用于通过 Internet,有多个开发角色的单个项目开发,Svn 适合企业内部由项目经理统一协调的多个并行项目的开发。

    3)权限管理策略不同。Git 没有严格的权限管理控制,只要有帐号,就可以导出、导入代码,甚至执行回退操作。Svn 则有严格的权限管理,可以按组、按个人进行针对某个子目录的权限控制。区分读、写权限。更严格的,不支持回退操作。保证代码永远可以追踪。

    4)分支(branch)的使用范围不一样。Git 中,你只能针对整个仓库作 branch,而且一旦删除,便无法恢复。而 svn 中,branch 可以针对任何子目录,它本质上是一个拷贝操作。所以,可以建立非常多、层次性的 branch,并且,在不需要时将其删除,而以后需要时只要 checkout 老的 svn 版本就可以了。

    5)基于第三点,Git 适用于单纯的软件项目,典型的就是一些开源项目,比如 Linux 内核、busybox 等。相反,Svn 擅长多项目管理。比如,你可以在一个 svn 仓库中存放一个手机项目的 bsp/设计文档 /文件系统 /应用程序 /自动化编译脚本,或者在一个 svn 中存放 5 款手机项目的文件系统。git 中必须建立 n(项目数)*m (组件数)个仓库。Svn 中只需要最多 n 或者 m 个就可以了。

    6)Git 使用 128 位 ID 作为版本号,而且 checkout 时要注明是哪个 branch,而 svn 使用一个递增的序列号作为全局唯一的版本号,更加简明易懂。虽然可以使用 gittag 来建立一些文字化的别名,但是毕竟那只是针对特殊版本。

    7)可跟踪性,git 的典型开发过程为:建立分支,进行开发,提交到本地 master,删除分支。这样做的后果是以前的修改细节会丢失。而在 svn 下做同样的事情,不会丢失任何细节。这里是一个有趣的链接,表明了 git 下典型的工作方式:(以 master 为核心,不断创建新 branch,删除旧 branch):

    http://www.kernel.org/pub/software/scm/git/docs/howto/separating-topic-branches.txt

    8)局部更新,局部还原。SVN 由于是在每个文件夹建立一个.svn 文件夹来实现管理,所以可以很简单实现局部更新或者还原。假如你只希望更新某些部分,则 svn 可以很好实现。同时代码写错了,同时可以很好实现局部还原,当然 git 也可以通过历史版本还原,但是无法简单地实现局部还原。

    SVN 属于集中化的版本控制系统
    这种做法带来了许多好处,特别是相较于老式的本地 VCS 来说。现在,每个人都可以一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限。
    事分两面,有好有坏。这么做最显而易见的缺点是中央服务器的单点故障。若是宕机一小时,那么在这一小时内,谁都无法提交更新、还原、对比等,也就无法协同工作。如果中央服务器的磁盘发生故障,并且没做过备份或者备份得不够及时的话,还会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录,被客户端提取出来的某些快照数据除外,但这样的话依然是个问题,你不能保证所有的数据都已经有人提取出来。
    Subversion 原理上只关心文件内容的具体差异。每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容。

    Subversion 的特点概括起来主要由以下几条:

    每个版本库有唯一的 URL (官方地址),每个用户都从这个地址获取代码和数据;
    获取代码的更新,也只能连接到这个唯一的版本库,同步以取得最新数据;
    提交必须有网络连接(非本地版本库);
    提交需要授权,如果没有写权限,提交会失败;
    提交并非每次都能够成功。如果有其他人先于你提交,会提示“改动基于过时的版本,先更新再提交”… 诸如此类;
    冲突解决是一个提交速度的竞赛:手快者,先提交,平安无事;手慢者,后提交,可能遇到麻烦的冲突解决。
    Git 属于分布式的版本控制系统
    自 2005 年诞生于以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。它的速度飞快,极其适合管理大项目,它还有着令人难以置信的非线性分支管理系统,可以应付各种复杂的项目开发需求。
    与 SVN 不同,Git 记录版本历史只关心文件数据的整体是否发生变化。Git 并不保存文件内容前后变化的差异数据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一连接。

    简略的说,Git 具有以下特点:

    Git 中每个克隆(clone)的版本库都是平等的。你可以从任何一个版本库的克隆来创建属于你自己的版本库,同时你的版本库也可以作为源提供给他人,只要你愿意。
    Git 的每一次提取操作,实际上都是一次对代码仓库的完整备份。提交完全在本地完成,无须别人给你授权,你的版本库你作主,并且提交总是会成功。
    甚至基于旧版本的改动也可以成功提交,提交会基于旧的版本创建一个新的分支。
    Git 的提交不会被打断,直到你的工作完全满意了,PUSH 给他人或者他人 PULL 你的版本库,合并会发生在 PULL 和 PUSH 过程中,不能自动解决的冲突会提示您手工完成。
    冲突解决不再像是 SVN 一样的提交竞赛,而是在需要的时候才进行合并
    和冲突解决。




    总之,公司的开发团队在进行的项目开发管理时,svn 是更好的选择,团队成员共同维护公司的中心版本。

    若是开源项目,则 git 更加适合,每个人都可以维护自己专属的版本,同时有 github 开源社区支持
    22 条回复    2019-08-16 17:58:34 +08:00
    mcluyu
        1
    mcluyu  
       2019-08-16 11:07:44 +08:00
    不明所以, 标题说 git 太慢, 第一条又说 git 效率高。。
    3. git 没有权限管理?
    4,7. 所以为什么要把 git branch 删除呢?
    8. 只要愿意, 你也可以在项目下面每个文件夹都加一个 git 仓库来管理
    GM
        2
    GM  
       2019-08-16 11:14:23 +08:00
    git 提交速度慢???? 你根本不知道 git 的提交是什么东西吧?这世界上还有比 git 提交东西更快的源码管理工具?
    huijiewei
        3
    huijiewei  
       2019-08-16 11:18:52 +08:00
    你这根本就不懂 git 啊
    GM
        4
    GM  
       2019-08-16 11:25:13 +08:00   ❤️ 1
    简单拿每一段话去谷歌搜索了一下,发现此文基本上是从不同的文章里复制粘贴拼凑出来的一篇垃圾文章。

    俗称洗稿文。
    TangMonk
        5
    TangMonk  
       2019-08-16 11:25:35 +08:00
    @mcluyu git 只有 pr
    ashin
        6
    ashin  
       2019-08-16 11:59:41 +08:00 via iPhone
    我真的还想再活五百年
    ipwx
        7
    ipwx  
       2019-08-16 12:03:36 +08:00 via Android   ❤️ 5
    我还不需要楼主这么一个外行对我指手画脚…
    liuxey
        8
    liuxey  
       2019-08-16 12:06:07 +08:00
    说了这么多,楼主是想让我们用 svn 呢,还是表示你不想用 git

    如果是前者,不好意思
    如果是后者,关我们什么事
    inhzus
        9
    inhzus  
       2019-08-16 12:09:58 +08:00 via Android   ❤️ 1
    https://www.xuejiayuan.net/blog/deaa360bb4f64fd39916d83292d1527a
    且不说内容怎么样,直接把别人的博客全文复制过来,连来源都不说明一下?一点自己的思想都没有?(当然我上边这个链接里边的内容可能也是复制别人的就是了
    Torpedo
        10
    Torpedo  
       2019-08-16 13:04:03 +08:00
    @GM 可能提交了大的文件吧。git 这方面不然 svn
    momocraft
        11
    momocraft  
       2019-08-16 13:12:57 +08:00
    我不會 和 git 不能是兩回事
    iPhoneXI
        12
    iPhoneXI  
       2019-08-16 13:37:39 +08:00 via Android
    都 9102 年了,用什么 SVN,出去面试都没人问
    summer20100514
        13
    summer20100514  
       2019-08-16 13:42:47 +08:00
    V 站的屏蔽功能真是好用
    dothis
        14
    dothis  
       2019-08-16 13:57:03 +08:00
    看到标题、我就知道、没那么简单、即将有大事儿发生 /dog
    8848
        15
    8848  
       2019-08-16 14:01:16 +08:00
    是不是没用过 git,SVN 用用就知道多 sb 了
    Erroad
        16
    Erroad  
       2019-08-16 14:07:45 +08:00
    应该是一个没用过 git 的人在凭空脑补
    RookieZoe
        17
    RookieZoe  
       2019-08-16 14:40:11 +08:00
    一看就是没怎么用过甚至没用过 git 的
    Sornets
        18
    Sornets  
       2019-08-16 15:37:01 +08:00
    把代码分析关掉试试
    Creabine
        19
    Creabine  
       2019-08-16 16:02:25 +08:00
    一篇文章如果标题很好,内容不一定好

    一片文章如果标题就很烂,颠三倒四语序都不通,内容一定很烂。。。
    AlynxZhou
        20
    AlynxZhou  
       2019-08-16 16:09:59 +08:00
    我为什么要浪费宝贵的 1 分钟摸鱼时间来看这种垃圾?
    AlynxZhou
        21
    AlynxZhou  
       2019-08-16 16:11:17 +08:00
    如果后面有人看到这里,希望这条能提醒你,你也浪费的生命中宝贵的 1 分钟来看这篇垃圾……

    // const TOTAL_WASTED_MIN = 1

    这样算回复对别人有帮助了吧……
    gaocc
        22
    gaocc  
       2019-08-16 17:58:34 +08:00
    从 svn 转到 git 一年,真香
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1543 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 17:07 · PVG 01:07 · LAX 09:07 · JFK 12:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.