我们有一个200MB的文件。我们目前使用rsync在其发生变化时在开发人员之间进行传输。如果我们将它作为我们的mercurial存储库的一部分包含进来,mercurial只会传递像rsync这样的差异,或者它会在更改时传输完整文件吗?mercurial传输完整文件还是仅传输差异?
回答
水银只传输增量当你hg pull
。否则分布式版本控制根本不起作用。
当你hg pull
,你的所有的变更在您的本地克隆失踪。每个变更集只包含一个增量。三角洲可以是小型的或大型的,但如果您对今天发现的rsync
三角洲感到满意,那么您也应该对Mercurial感到满意。
关于二进制文件:水银的确不作出承诺时,“文本”和“二进制”文件区分。它们都是相同的处理方式,并且在所有情况下都使用delta压缩。可以混淆的是,如果文件在每次编辑时都发生根本性变化,则增量压缩是无用的 - 增量将与文件本身一样大。在这种情况下,Mercurial实际上存储了文件的压缩快照。
+1另外值得一提的是,'汞incoming'也完全下载的变更(或在此情况下,增量)。 – 2012-02-08 15:21:37
就我所知,Mercurial不会为二进制文件存储或传输三角洲。所以我不认为这个答案在这种情况下是正确的。 – 2012-02-09 10:43:03
@LaurensHolst:即使对于“二进制”文件,它也会产生增量。我已经更新了答案,以澄清这一点。 – 2012-02-09 11:15:13
几个水银扩展已处理大文件的写入。他们通过版本化校验和来工作,而不是通过对文件本身进行版本控制。
如果您正在使用水银2.0或更高版本,那么它包括LargeFilesExtension默认。该文档解释了延长的工作原理:
的大型文件扩展允许用于跟踪水银大,不可 二进制文件,而无需过多的带宽 克隆并拉起。作为大文件添加的文件不会直接由Mercurial跟踪 ;相反,它们的修订版本由校验和 标识,并且Mercurial跟踪这些校验和。这样,当你克隆 仓库或拉的变更,大文件在老版本库的 不需要,只更新 到当前版本需要的人下载。这节省了磁盘空间和 带宽。
也有可以使用其他的扩展。这里有更多的信息:Handling Large Files
请注意,这是用于大型二进制文件。对于大型文本文件,查看差异可能仍然有用。 – 2012-02-08 15:21:10
+1:大文件扩展名在这里很有趣。您将避免下载不需要的大文件版本。因此,如果您从版本10下载并更新到版本50,那么您只能下载大文件以获得版本50.另一方面,正如Adam指出的那样,它不会执行任何增量压缩,因此您最终将下载* full *版本的该文件,因为它看起来在修订50.这可能最终会被比下载所有的10三角洲或多或少50 – 2012-02-08 15:38:05
让人惊讶的是,如果一个有用的扩展,扩展是使用一个像的rsync方法做更新的大文件。 – 2012-02-08 18:47:46
- 1. Etherpad Lite传输整个文件还是只传输差异?
- 2. mercurial生成文件名仅差异
- 3. WinSock:检查传输的文件是否完整
- 4. VB.Net文件传输:收到的文件不完整
- 5. 让PHP等到一个文件完成传输后再传输
- 6. 将差异输出传递给变量
- 7. 文件传输
- 8. 文件传输
- 9. 留意上完成文件传输
- 10. 串口未读取完整传输
- 11. 异步使用webclient传输文件
- 12. C#异步套接字文件传输
- 13. 在Flask中异步传输大文件
- 14. 异步分布式文件传输
- 15. 在传输过程中识别文件的完整大小
- 16. @get_headers是下载完整文件还是仅下载元数据?
- 17. 传输文件流
- 18. Android,文件传输
- 19. Python文件传输
- 20. B2B文件传输
- 21. Zend文件传输
- 22. 文件传输/ WCF
- 23. 文件传输RMI
- 24. C++文件传输
- 25. iPhone文件传输
- 26. Java文件传输
- 27. PHP文件传输
- 28. ASP.Net传输文件
- 29. 传输文件网
- 30. 传输文件C
是文件文本或二进制? – 2012-02-08 15:19:51
这是一个大的二进制文件 – HyderA 2012-02-08 15:32:28