我正在深入学习Git
,尽管我以前并未完全掌握SVN
。这是我第一次认真学习源代码控制管理系统。
我在想,如果不去学习(或者甚至反学就算了)SVN
,会有什么机会成本吗?有没有我需要特别注意的事情?
Git
相比于SVN
来说,是否存在一些无法做到或者非常困难的事情呢?
我正在深入学习Git
,尽管我以前并未完全掌握SVN
。这是我第一次认真学习源代码控制管理系统。
我在想,如果不去学习(或者甚至反学就算了)SVN
,会有什么机会成本吗?有没有我需要特别注意的事情?
Git
相比于SVN
来说,是否存在一些无法做到或者非常困难的事情呢?
Git无法svn lock
文档,因此有人可以防止其他人编辑不可自动合并的实体(例如Word或Excel文件)。
git
并没有根本性的原因不支持这个功能。只是还没有被实现而已。当然,在你在线的时候才能使用锁定功能。 - sleskeGit无法检出子树并像完整的存储库一样使用。
例如,使用Subversion可以检出目录“trunk”,并将其用作存储库。您还可以检出“branches / feature1”并使用它。在Git中,只能检出根目录(尽管在最近的版本中,您可以进行稀疏检出,不会下载所有文件,但仍然需要检出根目录)。在Git中,您应该使用分支而不是检出子树。
git checkout <子目录名称>
。该命令检出存储库中的文件子目录,就像 SVN 可以一样——只要先克隆存储库即可。在 SVN 中,之所以不必先克隆存储库,是因为 SVN 不是一种分布式版本控制系统......什么?你为什么那样看着我? - Dan MouldingGit无法存储空目录。可以说这是一个优点,但这是git不能做到而svn可以的一件事。
这个维基页面有一个很好的比较: https://git.wiki.kernel.org/index.php/GitSvnComparison
总结
对于我们来说,SVN最重要的功能是具有全库锁定文件的能力。由于我们使用二进制和不可合并的CAD文件,因此任何分布式版本控制系统的基于合并的工作流程在这里都无法工作。
Subversion是一个中央代码库。
虽然许多人希望有分布式代码库,以获得速度和多个副本的明显好处,但在某些情况下,中央代码库更为理想。例如,如果您有一些关键代码,不希望任何人访问,您可能不想将其放在Git下。许多公司希望保持他们的代码集中化,而(我猜)所有(严肃的)政府项目都在中央代码库下。
Subversion是传统智慧。
这意味着许多人(尤其是经理和老板)习惯于按版本编号并将开发视为沿时间“单线”进行硬编码。无意冒犯,但Git的自由并不容易接受。任何Git书籍的第一章都会告诉您要从头开始抹掉所有传统理念。
Subversion只有一种方式,没有其他方式。
SVN是一个版本控制系统。它只有一种方法来完成它的工作,每个人都是按照同样的方式进行操作。这使得从/到其他集中式VCS转换变得容易。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的时候不小心触碰到一些东西,他们会非常生气。在git或github中,我不能信任ssh密钥等一些安全性还有待改进的方面。