参考:https://wiki.mercurial-scm.org/LargefilesExtension
大文件有一些特点,不能压缩、版本之间的diff没有意义、也没法合并。这样的大文件用只保存文件版本差异的方式就不合适了,因为差异可能巨大。
用Mercurial的largefiles
扩展可以解决这个问题,把大文件放在中心版本服务器上,而不是放在每个人的本地。使用时,你只需要从中心版本服务器直接拿指定的版本。
这个扩展与Mercurial 2.0及以后的版本一起发布。
largefiles扩展让你可以在Mercurial里跟踪大文件,clone和pull时也不需要很大的网络带宽。这些新加的大文件,不是直接由mercurial管理,而是把大文件的不同版本直接用checksum区分,mercurial里跟踪这些checksum。通过这种方法,当你clone或者pull一个仓库时,只会下载当前版本的大文件。这样节省了硬盘,也节省了网络带宽。
第一步,在你的配置文件.hg/hgrc
里增加大文件扩展的设置:
[extensions]
largefiles =
当你往仓库里添增大文件时,用--large
选项来指定当前是大文件。例如:
$ hg add --large thisfileislarge
$ hg commit -m 'add thisfileislarge, which is large, as a largefile'
当你push了一个版本到远程仓库,这个大文件也一起被上传了。这样,中心版本服务器就存储着这个大文件的每一个完整的备份。当然,远程中心仓库也需要打开支持大文件扩展的设置。
当你从中心版本仓库pull带有大文件的版本,看起来与pull普通的文件没有区别。然而,当你update时这些大文件才被下载下来,如果之前没有下载过。就是说,只有没有下载过,才会下载,这样就节省了网络带宽。
如果你的仓库里已经有大文件了,但没有设置largefiles扩展,那么,你可以用hg lfconvert
命令来转换。
$ hg lfconvert --size 10 oldrepo newrepo
在配置文件中使能大文件扩展:
[extensions]
largefiles =
默认,超过10MB的文件会被认为是大文件。你可以通过largefiles.minsize
来修改这个阈值。
[largefiles]
minsize = 2
或者用在hg add后面加--lfsize
选项(单位MB):
$ hg add --lfsize 2
patterns
后面加上空格分开的文件名,指定这些文件需要被当作大文件:
[largefiles]
patterns = **.jpg re:.*\.(png|bmp) library.zip content/audio/*