2012-02-08 34 views
2

我们有一个200MB的文件。我们目前使用rsync在其发生变化时在开发人员之间进行传输。如果我们将它作为我们的mercurial存储库的一部分包含进来,mercurial只会传递像rsync这样的差异,或者它会在更改时传输完整文件吗?mercurial传输完整文件还是仅传输差异?

+0

是文件文本或二进制? – 2012-02-08 15:19:51

+0

这是一个大的二进制文件 – HyderA 2012-02-08 15:32:28

回答

5

水银只传输增量当你hg pull。否则分布式版本控制根本不起作用。

当你hg pull,你的所有的变更在您的本地克隆失踪。每个变更集只包含一个增量。三角洲可以是小型的或大型的,但如果您对今天发现的rsync三角洲感到满意,那么您也应该对Mercurial感到满意。

关于二进制文件:水银的确作出承诺时,“文本”和“二进制”文件区分。它们都是相同的处理方式,并且在所有情况下都使用delta压缩。可以混淆的是,如果文件在每次编辑时都发生根本性变化,则增量压缩是无用的 - 增量将与文件本身一样大。在这种情况下,Mercurial实际上存储了文件的压缩快照。

+1

+1另外值得一提的是,'汞incoming'也完全下载的变更(或在此情况下,增量)。 – 2012-02-08 15:21:37

+0

就我所知,Mercurial不会为二进制文件存储或传输三角洲。所以我不认为这个答案在这种情况下是正确的。 – 2012-02-09 10:43:03

+0

@LaurensHolst:即使对于“二进制”文件,它也会产生增量。我已经更新了答案,以澄清这一点。 – 2012-02-09 11:15:13

2

几个水银扩展已处理大文件的写入。他们通过版本化校验和来工作,而不是通过对文件本身进行版本控制。

如果您正在使用水银2.0或更高版本,那么它包括LargeFilesExtension默认。该文档解释了延长的工作原理:

的大型文件扩展允许用于跟踪水银大,不可 二进制文件,而无需过多的带宽 克隆并拉起。作为大文件添加的文件不会直接由Mercurial跟踪 ;相反,它们的修订版本由校验和 标识,并且Mercurial跟踪这些校验和。这样,当你克隆 仓库或拉的变更,大文件在老版本库的 不需要,只更新 到当前版本需要的人下载。这节省了磁盘空间和 带宽。

也有可以使用其他的扩展。这里有更多的信息:Handling Large Files

+0

请注意,这是用于大型二进制文件。对于大型文本文件,查看差异可能仍然有用。 – 2012-02-08 15:21:10

+0

+1:大文件扩展名在这里很有趣。您将避免下载不需要的大文件版本。因此,如果您从版本10下载并更新到版本50,那么您只能下载大文件以获得版本50.另一方面,正如Adam指出的那样,它不会执行任何增量压缩,因此您最终将下载* full *版本的该文件,因为它看起来在修订50.这可能最终会被比下载所有的10三角洲或多或少50 – 2012-02-08 15:38:05

+0

让人惊讶的是,如果一个有用的扩展,扩展是使用一个像的rsync方法做更新的大文件。 – 2012-02-08 18:47:46