SVN可以做什么,Git不能?

exp*_*rer 20 svn git

我目前Git在掌握之前已经深入了解SVN.这是我第一次认真的源控制管理系统学习体验.

我想知道不学习的机会成本(甚至是去学习我学到的东西)SVN.有什么我需要注意的吗?

是否存在与之Git相比不可行或难以忍受的事情SVN

P S*_*ved 15

Git不能提供svn lock文档,因此有人可以阻止其他人编辑非自动合并的实体(例如Word或Excel文件).


The*_*heo 14

Git无法检查子树并使用它,就像它是一个完整的存储库一样.

例如,使用Subversion,您可以检查目录"trunk"并将其用作存储库.您还可以查看"branches/feature1"并使用它.使用Git,只能检查根目录(尽管最新版本可以执行稀疏检出,但不会下载所有文件,但您仍然需要检查根目录).在Git中,您将使用分支而不是检查子树.

  • <sheldon-cooper>实际上,SVN无法检出子树并将其用作完整的*存储库*.SVN工作副本,或Git工作树,不是*存储库*.在Git中你肯定可以查看一个子树:`git checkout <subtree-name>`.该命令从存储库中检出文件的子树,就像SVN一样 - 您只需要首先克隆存储库.在SVN中,您不必首先克隆存储库的唯一原因是因为SVN不是*distributed*VCS ...什么?你为什么这样看着我?</ sheldon-cooper> (4认同)
  • @DanMoulding:是的.但是,在实践中,SVN允许您签出子树并从中提交.在Git中,您无法以允许您提交它并将提交推送到上游的方式获取子树. (3认同)

Mar*_*air 13

我认为你可能更喜欢使用Subversion而不是git的少数用例之一是,如果你正在尝试管理一个非常大的二进制媒体存储库,人们大多只想要最新的版本.例如,假设您正在开发游戏,艺术家需要跟踪所有艺术作品的修订版,但存储库的整个历史记录将是巨大的(100千兆字节)

为了公平对待git,这是一个与其设计目的相差甚远的用例(管理源代码存储库),如果你真的想要使用git,有各种各样的解决方法或扩展可能会有所帮助,例如:

  • 浅克隆
  • Scott Chacon的git-media扩展
  • Joey Hess的类似项目,git附件
  • 使用Avery Pennarun的bup直接创建包文件

...但它仍然是一个人们可能更喜欢SVN的领域.这里有一个关于这个问题的简单介绍从GitTogether几年前.


Mat*_*rog 7

Git无法存储空目录.可以说,这是一个优势,但是git不能做但是svn可以做的一件事.

  • 它并非在所有情况下都有优势,因为有时候不包含源代码的目录很重要.例如,当您想跟踪目录树的修订时,这是您的打包项目的"源". (2认同)

San*_*der 5

这个Wiki有一个很好的比较:https://git.wiki.kernel.org/index.php/GitSvnComparison

总结

  • Git比Subversion快得多
  • Subversion允许您只检查存储库的子树; Git要求您克隆整个存储库(包括历史记录)并创建一个工作副本,该副本至少镜像版本控制下的项目的子集.
  • Git的存储库比Subversions小得多(对于Mozilla项目,小30倍)
  • Git设计为从一开始就完全分发,允许每个开发人员完全本地控制
  • Git分支比Subversion更简单,资源更少
  • Git分支带有他们的整个历史
  • 在Git中进行合并不需要您记住您合并的修订版本(Subversion 1.5的发布避免了此优势)
  • Git提供了更好的分支和合并事件审核
  • Git的repo文件格式很简单,因此修复很容易,腐败很少见.
  • 集中备份Subversion存储库可能更简单 - 因为您可以选择在git中的repo中分发文件夹
  • Git存储库克隆充当完整存储库备份
  • Subversion的UI比Git更成熟
  • 在Subversion中浏览版本更简单,因为它使用顺序修订号(1,2,3,..); Git使用不可预测的SHA-1哈希值.使用"^"语法在Git中向后移动很容易,但是没有简单的方法可以向前走.

  • 资源管理器没有询问Git优于SVN的优势,而是关于缺点. (5认同)