是否有可以管理大文件的分布式VCS?

时间:2008-09-16 08:35:24

标签: version-control dvcs large-files

是否有可以处理大于可用RAM的文件的分布式版本控制系统(git,bazaar,mercurial,darcs等)?

我需要能够提交大型二进制文件(即数据集,源视频/图像,存档),但我不需要能够区分它们,只需提交然后在文件更改时更新

我在大约一年前看过这个,并没有一个明显的候选人允许这个,因为他们都是为了速度而在记忆中进行区分。这给我留下了一个VCS来管理代码和其他东西(“资产管理”软件或只是rsync和脚本)的大文件,当两者的目录结构重叠时,这非常难看。

7 个答案:

答案 0 :(得分:12)

自从我提出这个问题已经3年了,但是,从版本2.0开始,Mercurial包含largefiles extension,它完成了我最初寻找的内容:

  

largefiles扩展允许在Mercurial中跟踪大型不可压缩的二进制文件,而不需要过多的克隆和拉取带宽。 Mercurial不会直接跟踪作为大文件添加的文件;相反,他们的修订由校验和标识,Mercurial跟踪这些校验和。这样,当您克隆存储库或引入变更集时,不需要较旧版本的存储库中的大文件,只下载更新到当前版本所需的文件。这样可以节省磁盘空间和带宽。

答案 1 :(得分:10)

没有免费的分布式版本控制系统支持此功能。如果您需要此功能,则必须实现它。

你可以注销git:他们对Linux内核开发用例的原始性能感兴趣。他们不可能接受在扩展到巨大的二进制文件时的性能权衡。我不知道Mercurial,但他们似乎已经做出了类似git的选择,将他们的操作模型与他们的存储模型相结合以获得性能。

原则上,Bazaar应该能够通过一个实现树/分支/存储库格式的插件来支持您的用例,这些格式的磁盘存储和实现策略针对您的用例进行了优化。如果内部架构阻止了您,并且您发布了有用的代码,我希望核心开发人员将帮助修复内部架构。此外,您可以与Canonical建立功能开发合同。

可能最实用的方法,无论具体的DVCS如何构建混合系统:实现一个巨大的文件存储,并将对该商店中的blob的引用存储到您选择的DVCS中。

完全披露:我是Canonical的前雇员,并与Bazaar开发商密切合作。

答案 2 :(得分:4)

是的,Plastic SCM。它是分布式的,它以4Mb的块管理大型文件,所以它不受任何时候必须完全加载它们的限制。在这里找到关于DVCS的教程: http://codicesoftware.blogspot.com/2010/03/distributed-development-for-windows.html

答案 3 :(得分:3)

BUP可能就是你要找的东西。它是作为执行备份的git功能的扩展而构建的,但这实际上是相同的。它将文件分成块并使用滚动哈希来使文件内容可寻址/进行有效存储。

答案 4 :(得分:2)

我认为将二进制文件存储在任何形式的版本控制系统中都是低效的。

更好的想法是将元数据文本文件存储在引用二进制对象的存储库中。

答案 5 :(得分:1)

是否必须分发?据推测,subversion对于较新的,分布式VCS的一大好处是它具有处理二进制文件的卓越能力。

答案 6 :(得分:0)

我得出的结论是,在这种情况下,最好的解决方案是使用ZFS。

是ZFS不是DVCS,但是:

  • 您可以通过创建新FS来为存储库分配空间
  • 您可以通过创建快照来跟踪更改
  • 您可以将快照(提交)发送到另一个ZFS数据集