Subversion在存储大量二进制文件方面表现如何?

40

我正在寻找一个地方来存放几个GB的文档(主要是 .doc.xls 格式)。我的团队已经设置了Subversion服务器来管理我们创建的文档,所以如果可能的话,我更愿意使用它。Subversion能否很好地处理所有这些额外的东西?其中大部分都是旧信息,只会有一个版本,但是有可能会有一些文档需要更新。

有人警告过我,SVN对于大量大型二进制文件并不友好。我不敢尝试去看它是否可行,因为即使我稍后删除它们,它们仍将在版本库历史记录中。

还有其他选择吗?我们需要能够对文档进行评论和/或标记,但我们可以使用类似Delicious的服务,结合SVN中文档的URL(或类似的服务)。

后来 我不太担心二进制文件的差异,因为如上所述,它们不会经常改变。如果确实需要更新,我可以接受略微麻烦的操作--这比SharePoint更糟糕也不会多。

7个回答

42

在我之前的公司,我们设置了Subversion来存储CAD文件。Subversion可以存储高达100 MB的文件。如果有很多人向Subversion添加大文件,web服务器可能会成为瓶颈。然而,增量提交是完全没有问题的。

Subversion存储'二进制增量'。事实上,在服务器端,二进制和文本文件在存储'增量'时被完全相同地对待。请参阅页面http://subversion.tigris.org/svn_1.4_releasenotes.html上的“二进制增量编码改进”部分。它明确表示“Subversion使用xdelta算法计算字节串之间的差异”,而不是“字符串”。

仅供实验,我存储了10个版本的CAD(CATIA部件文件)。每个版本我都对零件进行了微小修改,然后检查了服务器端存储库的大小。对于大约10次修订,总大小约为原始文件大小的1.2倍。

记得设置svn:needs-lock属性。根据文件扩展名使用“自动属性”来设置svn:needs-lock是最好的方法,这是我的经验。


35

许多大型二进制文件和大量二进制文件之间存在差异。

根据我的经验,SVN可以处理几百兆字节的单个二进制文件。我遇到过的唯一问题是当单个文件大小达到约1GB时会出现各种神秘和不明原因的操作失败,可能是SVN无法处理与网络相关的问题。

我不知道任何与二进制文件数量有关的SVN问题,除了它们无法合并以及二进制文件通常无法高效存储为增量(SVN可以使用增量)之外。

所以:

  • 1000个1MB文件 = 可以。
  • 100个10MB文件 = 可以。
  • 10个100MB文件 = 可以。
  • 1个>1000MB文件 = 不是一个好主意。

希望您的文档大小符合其中之一 :)


我希望这个区别是正确的,但我不确定。 - James A. Rosen
3
根据其他回答,显然“修订版本未以增量方式存储”的说法是不正确的。请您更正一下? - onnodb
存储文件需要大量的RAM,所以如果通过Apache提供服务,可能会导致您的Web服务器放弃。我知道我的小型VM曾经出现过错误,但是在分配更多RAM后这些错误消失了。显然,更新的版本会更好。 - gbjbaanb

3
我们为此构建了Subversion客户端,因为我们确实需要版本控制来完成一些大型设计/咨询项目。我们从未遇到过任何问题。

1

这取决于文件更新的频率。它无法处理合并二进制文件,因此每次出现冲突时都会很痛苦。否则,它只是存储和检索,虽然不如文本那样好,但仍然可以很好地处理。


0

我个人使用Mercurial来完成这些任务。我已经用它来存储数百GB的媒体文件。是的,它会占用一些磁盘空间,但磁盘空间很便宜。使用Mercurial,您还可以获得分布式的好处,因此在进行“checkout”或在Mercurial中称为克隆时,您将获得整个repo,而不仅仅是快照。如果您的服务器出现故障,那么您仍然可以继续运营。


8
快速问题,每次需要创建新的工作副本时,如何处理克隆多GB仓库的问题? - David Suarez

-4

从我所见,相比于Subversion,Git非常快,我听说它比Mercurial稍微快一点。然而,我没有专门测试过它在处理大型或大量二进制文件方面的表现。

话虽如此,由于Git跟踪变更的方式,我想它在处理二进制文件方面非常高效。

但我可以肯定地说,一旦我习惯了Git,我绝不会选择回到Subversion。当我不得不使用Subversion存储库时,我仍然使用git-svn。这样,我就可以获得分布式版本控制的所有优势,但仍然可以获得将提交推送回中央Subversion存储库的非常好的支持。


1
我是一个_Git_的超级粉丝,但我们已经有了SVN基础架构,而且我们这里没有Git的基础架构。如果SVN行不通,那就算了,但如果可以,我会愿意免费做管理员! - James A. Rosen
3
这是一个直截了当的问题:Git 有什么优点? - Peter Wone
10
请告诉我们二进制文件的真实情况,不要想象它可能是什么样子。我可以想象 git 在 Microsoft 文件上根本不能工作 - 这样的说法和你的“答案”一样愚蠢。 - gbjbaanb
5
就我的情况而言,SVN比Git表现更好。我当时正在开发一个非常庞大的PHP Web项目,其中有很多分散在各个目录中的二进制文件。对我们来说,SVN的浅层检出非常有效。Git的稀疏检出并没有起到作用,因为它无法处理这种情况。参考链接:http://stackoverflow.com/questions/11214295/svn-vs-git-shallow-sparse-checkout-branching-commit#comment14729913_11214295 - surajz
如果要使用Git处理大型二进制文件,建议使用现在可用的Git Large File Storage扩展 - Kuitsi
显示剩余3条评论

-5

嗯,将所有这些存储在Subversion中将占用很多空间,我可以告诉你。Subversion不像存储文本文件那样通过增量来存储二进制文件。它可能会占用与仅在硬盘驱动器上存储一堆二进制文件相同的空间加上存储库。

您可以尝试使用服务器端的tiddlywiki将文档的URL存储在Subversion中。

如果它们大多是.doc和.xls文件,则还有Microsoft的Sharepoint。


先生,您说得对,这是我们工作中的一个大问题。现在有其他版本控制系统发布了,可以处理二进制文件和增量。 - Kieran Senior
如果只能一个个文件地上传,SharePoint会很困难,因为这需要我花费数周的时间。 - James A. Rosen
11
什么?Subversion相对于CVS的主要卖点之一就是Subversion可以对二进制文件进行增量处理。 - Andy Dent
也许自从我开始使用它以来有些变化了。你能给我指一些相关的文档吗?谢谢,安迪! - leeand00
1
@leeand00:这是一篇关于SVN存储的文章。http://www.ibm.com/developerworks/java/library/j-svnbins.html - Bill the Lizard
现在已经很晚了,但是对于其他读者,这里有“二进制文件的差异”文档记录:http://svnbook.red-bean.com/en/1.6/svn.forcvs.binary-and-trans.html - Spangen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接