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对文件名和提交消息中的非US ASCII字符没有严格的(独立于平台的)支持,Git只存储它从操作系统获得的字符的字节表示,而不是转换它
- 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.