是否有可以处理大于可用RAM的文件的分布式版本控制系统(git,bazaar,mercurial,darcs等)?
我需要能够提交大型二进制文件(即数据集,源视频/图像,存档),但我不需要能够区分它们,只需提交然后在文件更改时进行更新.
我大约一年前看过这个,没有一个明显的候选人允许这个,因为它们都是为了速度而在记忆中进行区分.这给我留下了一个VCS来管理代码和其他东西("资产管理"软件或只是rsync和脚本)的大文件,当两者的目录结构重叠时,这是非常难看的.
我问这个问题已经3年了,但是,从版本2.0开始,Mercurial包含了largefiles扩展,它实现了我最初寻找的东西:
largefiles扩展允许在Mercurial中跟踪大型不可压缩的二进制文件,而不需要过多的克隆和拉取带宽.Mercurial不会直接跟踪作为大文件添加的文件; 相反,他们的修订由校验和标识,Mercurial跟踪这些校验和.这样,当您克隆存储库或引入变更集时,不需要较旧版本的存储库中的大文件,只下载更新到当前版本所需的文件.这节省了磁盘空间和带宽.
没有免费的分布式版本控制系统支持.如果您需要此功能,则必须实现它.
你可以注销git:他们对Linux内核开发用例的原始性能感兴趣.他们不可能接受在扩展到巨大的二进制文件时的性能权衡.我不知道Mercurial,但他们似乎已经做出了与git相似的选择,将他们的操作模型与他们的存储模型相结合以获得性能.
原则上,Bazaar应该能够通过一个实现树/分支/存储库格式的插件来支持您的用例,这些格式的磁盘存储和实现策略针对您的用例进行了优化.如果内部架构阻止了您,并且您发布了有用的代码,我希望核心开发人员将帮助修复内部架构.此外,您可以与Canonical建立功能开发合同.
可能最实用的方法,不管具体的DVCS如何构建混合系统:实现一个巨大的文件存储,并将对该存储中的blob的引用存储到您选择的DVCS中.
完全披露:我是Canonical的前雇员,并与Bazaar开发商密切合作.