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