Git vs SVN:性能和存储

Posted

技术标签:

【中文标题】Git vs SVN:性能和存储【英文标题】:Git vs SVN: Performance and Storage 【发布时间】:2012-12-15 06:02:26 【问题描述】:

我想使用 Git 或 SVN (Subversion) 之一作为备份系统。对我来说唯一重要的是系统的存储和性能。我四处搜索,发现的大部分结果都是比较它们与源代码控制相关的功能,例如分支、本地存储库等。但是,正如我所提到的,我在寻找这些功能。

简而言之,我想知道:

哪一种存储效率更高(占用空间更少) 哪个更可靠(如果推送/提交时发生崩溃,哪个更好处理错误) 哪个做事更快 哪个可以更好地处理大型存储库(如果提交的修订太多,效果会更好) ...

如果在比较中添加一些事实(实验),我将不胜感激。我正在寻找确凿的证据。

【问题讨论】:

备份系统是什么?配置文件?二进制数据?无论如何,在安全方面,git 胜出(因为所有提交都是唯一散列的)。 如果您只想备份内容,备份软件可能比源代码管理软件更有效。 @fge 文件是文本文件。 html文件/源文件/javascript/CSS等 @MattiVirkkunen 不,我仍在寻找版本控制,尤其是寻找基于 delta 的存储库。 @robmayoff 有太多变量可能需要太多时间进行测试。我想也许有人以前做过这样的比较并付出了努力。此外,它需要对这两个系统都有很好的了解。我对两者都有点熟悉,但不是很熟悉。 【参考方案1】:

git,没有竞争对手:

它更加安全(所有提交都经过唯一哈希处理), 它更紧凑(过去 5 年的整个 Linux 内核历史在我的机器上占用不到 1 GB), 它快得多了,甚至都不好笑, 它很容易复制,因为它是去中心化的。

当然,使用 git 与 SVN 大不相同。但是教程也很丰富。

Here 是一个在几个选定场景中比较 git 和 svn 性能的链接。

【讨论】:

@fge - 这与安全无关。 @fge - 你错过了一点,如果他们有权访问损坏的跟踪文件,他们就有权损坏保存哈希的文件,而你永远不会知道存储库已损坏。 -1 散列不是一种安全功能。在 git 中它用于一致性,但类似的功能也有 SVN。 @KingCrunch 所以,完整性不是安全性?我永远不会在你的服务器上托管我的代码...... en.wikipedia.org/wiki/SHA-1#Data_Integrity: "Linus Torvalds 说过,'Git 使用 SHA-1 的方式与安全性毫无关系......它只是你能得到的最好的哈希...... .. 这是关于信任您的数据的能力。'"【参考方案2】:
哪一种存储效率更高(占用空间更少)

具有相同内容的 Subversion 存储库和 Git 存储库的大小will be equal,除非存储库包含大量二进制项。在这种情况下,Git 存储库可能会比 SVN 存储库占用更多空间。

哪个更可靠(如果推送/提交时发生崩溃,哪个更好处理错误)

我投票给 SVN 只是因为使用 Git 的客户端操作可能会破坏存储库或 repo history。 Subversion 永远不会发生这种情况。推送提交时崩溃绝不会导致两个系统出现任何问题。

哪个做事更快

Git 更快,因为存储库始终是本地的。但是,通过网络克隆 repo 仍然需要一些时间。

在 Subversion 中,您不需要克隆整个存储库;您只需要检查工作区,在大多数情况下,它比克隆 Git 存储库花费的时间更少。

哪一个可以更好地处理大型存储库(如果太多 提交的修订,效果会更好)

Subversion 比 Git 更适合大型项目和 repos。见

http://svnvsgit.com/#git-scalability-for-larger-project-myth http://svnvsgit.com/#git-scalability-for-larger-teams-myth

【讨论】:

SVN 存储库通常比 git 存储库大。我转换了其中的几个,在每种情况下都是如此,通常是 10 倍甚至更多。您链接到的 svnvsgit 页面声称在大多数情况下是错误的或具有误导性的内容。 SVN 在某些情况下更胜一筹,但这些说法过于简单且具有误导性。 @argeman 你介意展示一些 svn vs git repo 大小和迁移过程的例子吗? 我无法向您展示我的示例,因为它们都不是开源的。但是,这种比较本身是完全没有用的; svn repo 存储一次(+backups),git 存储库在每台使用它的机器上至少存储一次(+backups)。因此,对于不适合目标机器的存储库,git 根本无法工作。这是否相关取决于确切的用例。 好吧,如果你也考虑 git-lfs,上面提到的问题就会消失。但那是另一回事了,比较存储库大小仍然没有任何意义。【参考方案3】:

使用rsync 进行备份。

如果保留正在备份的文件的历史记录很重要,请使用rdiff-backup

Git 和 SVN 不是备份实用程序。


我知道您并不关心 SCM 工具的功能,这应该是您不需要的指标,但是(!),如果您使用 SCM 工具像 Git 或 SVN,你将不得不处理实际的提交。

如果我的唯一目标是拥有一组文件的完整副本,我会认为这是一个巨大的痛苦。


速度而言,如果您与备份目的地的连接速度很快,rsyncrdiff-backup 将是最快的。 Git 会花时间处理文件(压缩文件、构建对象等)。

如果您的连接速度较慢,Git 可能会更好,因为您将传输文件的压缩版本。您只需提前处理时间


如果安全是一个问题,请知道您可以使用ssh 之类的东西作为rsync 的传输方法。当然,这对于 Git 也是可能的。如果使用得当,我会认为这两种工具同样安全。

【讨论】:

rsync 也不是备份实用程序。这是一个文件复制实用程序。 rdiff-backup 是基于rsync 的备份实用程序。 你假设他想要区分事物。 不,我不是。他评论说他想要“基于 delta 的存储库”,这从他使用 Git 或 SVN 的愿望中已经很明显了。 是的,完全正确。我确实需要运行 diff,但我不确定一个简单的工具是否能满足我的需求。与SVNGit 相比,rsync 有哪些优势? Git 是一个出色的备份工具。我经常使用它。我不需要差异,但我确实需要回到特定的时间点。我不理解似乎避免使用 Unix 工具而不是它们的意图的心态。 Unix 工具通常被设计为以意想不到的方式使用。【参考方案4】:

比较见GitSvnComparison。此外,您还可以使用 Mercurial。

【讨论】:

这正是我想要的。只有一个问题:是否可以从 Git 中检索特定版本的单个文件?我知道 SVN 有这个。 看看以前的回答就知道了。

以上是关于Git vs SVN:性能和存储的主要内容,如果未能解决你的问题,请参考以下文章

元数据性能大比拼:HDFS vs OSS vs JuiceFS

经过多次修改后的SVN性能

元数据性能大比拼:HDFS vs OSS vs JuiceFS

Jenkins+git+maven的使用

版本控制工具 - git和svn

腾讯云VS AWS :云存储网关性能谁更优?