在掌握Git
之前,我目前已深入SVN
。这是我第一次认真的源控制管理系统学习体验。
我想知道不学习(或者甚至去学习我学到的东西)的机会成本SVN
。有什么我需要注意的吗?
Git
与SVN
相比,是否存在不可行或难以处理的事情?
答案 0 :(得分:14)
Git无法检查子树并将其用作完整的存储库。
例如,使用Subversion,您可以检查目录“trunk”并将其用作存储库。您还可以查看“branches / feature1”并使用它。使用Git,只能检查根目录(尽管最新版本可以执行稀疏检出,但不会下载所有文件,但您仍然需要检查根目录)。在Git中,您将使用分支而不是检查子树。
答案 1 :(得分:14)
Git无法svn lock
个文档,因此有人可以阻止其他人编辑非自动合并的实体(例如Word或Excel文件)。
答案 2 :(得分:13)
我认为您可能更喜欢使用Subversion而不是git的少数用例之一是,如果您正在尝试管理一个非常大的二进制媒体存储库,其中人们通常只需要最新版本。例如说你正在开发一个游戏,艺术家需要跟踪所有艺术作品的修订,但是存储库的整个历史将是巨大的(100千兆字节)
为了公平对待git,这是一个与其设计目的相差甚远的用例(管理源代码存储库),如果你真的想要使用git,那么有各种解决方法或扩展可能会有所帮助,例如:
...但它仍然是一个人们可能更喜欢SVN的领域。几年前GitTogether中有一个brief presentation on this subject。
答案 3 :(得分:7)
Git无法存储空目录。可以说,这是一个优势,但是git不能做但是svn可以做的一件事。
答案 4 :(得分:5)
这个Wiki有一个很好的比较:https://git.wiki.kernel.org/index.php/GitSvnComparison
<强>汇总强>
答案 5 :(得分:3)
答案 6 :(得分:2)
我会说你几乎可以做任何与git有关的事情,甚至比颠覆更能让你做到。那应该不是你的担心。然而,两者都很受欢迎,值得您的关注,特别是如果您在开源编程中。
然而,我会认为git更难学,但是一旦掌握了它,人们通常会上瘾,并发现其他SCM较差。对git的分布式支持是非常好的(还有其他一些,但git可能是最普遍的),这对于除了单独管理源代码之外的许多其他任务来说恰好是有用的。 git可以被认为是类固醇的ZIP实用程序,可以快速部署以跟踪常规文件系统更改并以有效的方式在主机之间复制更改。在Windows上,git存在一些问题:
但是我会考虑git有的东西而SVN没有。没有对SVN中的分支的明确支持是一个主要问题 - git实现非常好并且允许您在不考虑分支的情况下进行分支。能够离线工作也是一个主要的享受。
答案 7 :(得分:2)
对于我们来说,SVN最重要的功能是能够重新存储整个锁文件。由于我们使用二进制和不可合并的CAD文件,因此任何DVCS的基于合并的工作流程都不起作用。
答案 8 :(得分:2)
您无法限制对repo的一部分的读取权限(即仅允许读取某些文件,或仅允许读取部分历史记录)。这是因为您只能克隆一个完整的存储库这一事实的直接后果(如Theo和Mark Longair所述)。如果您希望对不同文件使用不同级别的读取访问权限,则必须将它们放入不同的存储库(可以作为子模块包含在主存储库中)。
请注意,可以根据许多条件(路径,文件名,历史记录修改)限制对repo的写访问权限。您需要使用除git之外的特殊软件来执行此操作(例如gitosis),但这与Subversion类似。
在实践中,上面通常不是问题,因为在Git中,想法是存储库包含通常一起使用的文件(例如一个程序或项目的源代码) - 因此通常限制对部件的读取访问没有意义,因为您需要所有文件来构建/使用项目。但是,如果你把许多松散相关的东西放到一个git仓库中,这可能会让你感到厌烦。
答案 9 :(得分:2)
Subversion是一个中央存储库
虽然许多人希望拥有分布式存储库以获得速度和多个副本的明显优势,但有些情况下更需要中央存储库。例如,如果你有一些你不想让任何人访问的关键代码,你可能不想把它放在Git下面。许多公司希望保持代码集中,并且(我猜)所有(严重的)政府项目都在中央存储库中。
颠覆是传统智慧
这就是说许多人(尤其是经理和老板)都有通常的方式对版本进行编号,并将开发视为一条“单线”,随着时间的推移硬编码到他们的大脑中。没有冒犯,但Git的慷慨解囊并不容易。任何Git书的第一章都告诉你要从脑海中消除所有传统理想并重新开始。
Subversion以一种方式做到了,没有别的
SVN是一个版本控制系统。它有一种方法可以完成它的工作,每个人都以同样的方式做到这一点。期。这使得从/向其他集中式VCS过渡到/从SVN变得容易。 Git甚至不是一个纯粹的VCS - 它是一个文件系统,有很多关于如何在不同情况下设置存储库的拓扑结构 - 而且没有任何标准。这使得选择一个更难。
其他优点是:
SVN supports empty directories
SVN has better Windows support
SVN can check out/clone a sub-tree
SVN supports exclusive access control svn lock which is useful for hard-to-merge files
SVN supports binary files and large files more easily (and doesn't require copying old versions everywhere).
Adding a commit involves considerably fewer steps since there isn't any pull/push and your local changes are always implicitly rebased on svn update.
找到并同意。当你触摸git时,newbees再次非常agro。我不能相信git或github,直到更多的安全性更改,例如超越可破解的ssh密钥。
答案 10 :(得分:1)
使用Git的分布式特性,没有一个地方(服务器)你/ sysadmin可以备份整个代码库。每个节点必须自己进行备份或每天合并到一个需要每日备份的节点。
答案 11 :(得分:1)
注意:“将整个内容拆分为多个存储库”的策略也不总是可行。如果我们作为Gamedev团队拥有一个多T游戏回购协议(包括源代码和资产,并且#1和#2都是资产所必需的)-我们当然需要从一个单一的回购协议构建我们的游戏(否则,没有多个回购引用,整个事情就变得不可复制-这是一件不好的事情。
答案 12 :(得分:0)
svn可以做的另外两件事我想念git: