14

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

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

我上次看这个大约是一年前,没有一个明显的候选人允许这样做,因为它们都是为了速度而设计的。这给我留下了一个用于管理代码的 VCS 和用于大文件的其他东西(“资产管理”软件或只是 rsync 和脚本),当两者的目录结构重叠时,这非常难看。

4

7 回答 7

12

我问这个问题已经 3 年了,但是,从 2.0 版开始,Mercurial 包括largefiles 扩展名,它完成了我最初寻找的内容:

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

于 2011-11-03T08:00:57.900 回答
10

没有免费的分布式版本控制系统支持这一点。如果你想要这个特性,你必须实现它。

您可以注销 git:他们对 Linux 内核开发用例的原始性能感兴趣。他们不可能接受在扩展到大型二进制文件时的性能权衡。我不了解 Mercurial,但他们似乎做出了与 git 类似的选择,将其操作模型与存储模型耦合以提高性能。

原则上,Bazaar 应该能够使用实现树/分支/存储库格式的插件来支持您的用例,其磁盘存储和实现策略已针对您的用例进行了优化。如果内部架构阻碍了你,而你发布了有用的代码,我希望核心开发人员会帮助修复内部架构。此外,您可以与 Canonical 签订功能开发合同。

不管具体的 DVCS 是什么,可能最实用的方法是构建一个混合系统:实现一个大文件存储,并将对该存储中的 blob 的引用存储到您选择的 DVCS 中。

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

于 2008-09-16T11:44:11.733 回答
4

是的,塑料单片机。它是分布式的,它管理 4Mb 块中的大文件,因此它不受任何时候必须将它们完全加载到内存上的限制。在此处查找有关 DVCS 的教程:http: //codicesoftware.blogspot.com/2010/03/distributed-development-for-windows.html

于 2010-03-30T12:48:47.003 回答
3

BUP 可能是您正在寻找的。它是作为 git 备份功能的扩展而构建的,但这实际上是一回事。它将文件分成块并使用滚动哈希使文件内容可寻址/有效存储。

于 2012-06-18T15:41:37.717 回答
2

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

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

于 2008-09-16T08:45:36.700 回答
1

一定要分发吗?据推测,颠覆对较新的分布式 VCS 的一大好处是其处理二进制文件的卓越能力。

于 2008-09-16T08:50:52.740 回答
0

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

是的,ZFS 不是 DVCS,但是:

  • 您可以通过创建新 FS 为存储库分配空间
  • 您可以通过创建快照来跟踪更改
  • 您可以将快照(提交)发送到另一个 ZFS 数据集
于 2017-07-08T02:15:13.800 回答