如何使用Mercurial存储我的二进制资产?

时间:2012-02-10 00:09:56

标签: mercurial large-files subrepos

我正在开始一个游戏开发项目,我的团队和我将使用Mercurial进行版本控制,我想知道为游戏存储二进制资产的更合适的方法是什么。基本上,我有两个选择:

  1. Mercurial 2.1有largefiles extension,但我不太了解它。它似乎可以解决'存储库膨胀'问题,但不能解决二进制合并冲突问题。

  2. 将二进制资产保存在SVN结帐中,作为子参数。这样我们就可以锁定文件进行编辑并避免合并冲突,但我真的希望避免使用2个版本控制系统(特别是我不太喜欢的那个)。

  3. 我没有想过的任何见解/建议或其他选择?

2 个答案:

答案 0 :(得分:2)

正如你猜测的那样large files会做你需要的。对于合并二进制文件,您可以set up a merge tool if one exists for your file type。像这样:

[merge-tools]
mymergetool.priority = 100
mymergetool.premerge = False
mymergetool.args = $local $other $base -o $output
myimgmerge = SOME-PROGRAM-THAT-WILL-MERGE-IMAGES-FOR-YOU
[merge-patterns]
**.jpg = myimgmerge
**.exe = internal:fail

一般来说,使用源代码控制工具合并非文本内容总是很麻烦。存在数字资产管理应用程序,以减少痛苦,但它们不是分散的或非常愉快的工作。

答案 1 :(得分:2)

你是正确的largefiles extension将避免膨胀存储库。会发生什么是您只下载要检出的修订版所需的大文件。因此,如果您有一个50 MB的文件并且它已经被彻底编辑了10次,那么这些版本可能在服务器上占用500 MB。但是,当您执行hg update时,您只需下载该修​​订版所需的50 MB版本。

你也是正确的,largefiles扩展名没有帮助合并。事实上,它完全跳过合并步骤,只提示你这样:

largefile <some large file> has a merge conflict
keep (l)ocal or take (o)ther?

您没有机会使用正常的合并机制。

要进行锁定,您可以使用我为客户编写的lock extension。他们希望将它用于文档部门,人们可以使用无法轻松合并的文件。它基本上将Mercurial转变为类似于Subversion的集中式系统:锁存储在中央存储库的文件中,客户端在hg locks之前和hg commit之前联系此存储库。