mercurial是传输完整文件还是只传输差异?

时间:2012-02-08 14:51:23

标签: mercurial dvcs rsync pull

我们有一个200mb的文件。我们目前使用rsync在开发人员更改时将其传输。如果我们将它作为我们的mercurial存储库的一部分包含在内,那么mercurial只会像rsync那样传输差异,还是会在更改后传输完整的文件?

2 个答案:

答案 0 :(得分:5)

Mercurial仅在您hg pull时转移增量。否则分布式版本控制根本不起作用。

当您hg pull时,您将获得本地克隆中缺少的所有变更集。每个变更集只包含一个delta。 delta可能很小或很大,但是如果你对今天rsync找到的增量感到满意,那么你也应该对Mercurial感到满意。

关于二进制文件:Mercurial在提交时区分“text”和“binary”文件。它们都被处理相同,并且在所有情况下都使用delta压缩。令人困惑的是,如果文件在每次编辑时发生根本变化,则增量压缩将毫无用处 - 增量将与文件本身一样大。在这种情况下,Mercurial实际上存储了文件的压缩快照。

答案 1 :(得分:2)

已经编写了几个用于处理大型文件的Mercurial扩展。它们通过版本化校验和来工作,而不是通过对文件本身进行版本控制。

如果您使用的是Mercurial 2.0或更高版本,则默认情况下它包含LargeFilesExtension。文档解释了扩展如何工作:

  

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

您还可以使用其他扩展程序。这里有更多信息:Handling Large Files