SVN能做什么Git做不到的?

SVN能做什么Git做不到的?,svn,git,Svn,Git,在掌握SVN之前,我目前正在深入学习Git。这是我第一次认真学习源代码管理系统 我想知道不学习(甚至不学习我所学的很少的东西)的机会成本。有什么我需要注意的吗 在Git中,与SVN相比,是否有一些事情是不可行的,或者是非常困难的?这个Wiki有一个很好的比较: 总结 Git比Subversion快得多 Subversion只允许您签出存储库的子树;Git要求您克隆整个存储库(包括历史记录),并创建一个工作副本,该副本至少镜像版本控制项的一个子集 Git的存储库比Subversion小得多(对于

在掌握
SVN
之前,我目前正在深入学习
Git
。这是我第一次认真学习源代码管理系统

我想知道不学习(甚至不学习我所学的很少的东西)的机会成本。有什么我需要注意的吗


Git
中,与
SVN
相比,是否有一些事情是不可行的,或者是非常困难的?

这个Wiki有一个很好的比较:

总结

  • Git比Subversion快得多
  • Subversion只允许您签出存储库的子树;Git要求您克隆整个存储库(包括历史记录),并创建一个工作副本,该副本至少镜像版本控制项的一个子集
  • Git的存储库比Subversion小得多(对于Mozilla项目,它比Subversion小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无法签出子树并将其当作完整的存储库来使用

例如,使用Subversion,您可以签出目录“trunk”,并像使用存储库一样使用它。您还可以签出“分支/功能1”并使用它。使用Git,只能签出根目录(尽管在最新版本中,您可以执行稀疏签出,但并不下载所有文件,您仍然必须签出根目录)。在Git中,您将使用分支而不是签出子树。

  • Git对文件名和提交消息中的非US ASCII字符没有严格的(独立于平台的)支持,Git只存储它从操作系统获得的字符的字节表示,而不是转换它
  • Git无法记录已选中的特定提交

我想说,在git中,你几乎可以做任何重要的事情,甚至比subversion更重要。那不应该是你担心的。然而,这两种方法都很受欢迎,值得您关注,尤其是在您从事开源编程时

然而,我认为Git更难学,但是一旦你掌握了它,人们通常会沉迷于其他SCM。git的分布式支持非常出色(也有其他支持,但git可能是最广泛的支持),这恰好对许多其他任务有用,而不仅仅是管理源代码。git可以被认为是一个可靠的ZIP实用程序,可以快速部署以跟踪一般的文件系统更改,并以高效的方式在主机之间复制更改

在windows上,git存在一些问题:

  • Unicode文件名支持在许多实现中存在缺陷。这种情况一直在好转,但仍然是个问题
  • 浏览器插件在Windows上不是很好。我发现使用命令行版本更容易

但是我会考虑Git所拥有的东西,而Svn却不这么做。SVN中没有对分支的excplicit支持是一个主要问题——git实现非常好,可以让您在不考虑分支的情况下进行分支。能够脱机工作也是一项主要任务。

Git无法编辑文档,因此有人可能会阻止其他人编辑不可自动合并的实体(如Word或Excel文件).

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

对git公平地说,这是一个与设计目的(管理源代码存储库)相去甚远的用例,如果您真的想使用git实现这一目的,有各种变通方法或扩展可能会有所帮助,例如:

  • 浅层克隆
  • Scott Chacon的扩展
  • 乔伊·赫斯的类似项目
  • 使用Avery Pennarun直接创建包文件

。。。但这仍然是一个人们可能更喜欢SVN的领域。几年前有一个来自GitTogether的消息。

对我们来说,SVN最重要的特性是能够存储全锁文件。由于我们使用的是二进制和不可合并的CAD文件,因此任何基于合并的DVC工作流在此都不起作用。

Git不能存储空目录。可以说,这是一个优势,但这是git不能做的事情,只有svn可以做。

由于git的分布式特性,没有一个地方(服务器)可以让您/系统管理员备份整个代码库。每个节点必须进行自己的备份或每天合并到一个进行每日备份的节点。

您不能限制对repo的一部分进行读取访问(即只允许读取某些文件,或只允许读取历史记录的一部分)。这是t的直接后果
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.