是否有可以处理大于可用RAM的文件的分布式版本控制系统(git,bazaar,mercurial,darcs等)?
我需要能够提交大型二进制文件(即数据集,源视频/图像,存档),但我不需要能够区分它们,只需提交然后在文件更改时更新
我在大约一年前看过这个,并没有一个明显的候选人允许这个,因为他们都是为了速度而在记忆中进行区分。这给我留下了一个VCS来管理代码和其他东西(“资产管理”软件或只是rsync和脚本)的大文件,当两者的目录结构重叠时,这非常难看。
答案 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,但是: