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

4
我正在开始一个游戏开发项目,我的团队和我将使用Mercurial进行版本控制,我想知道更适合存储游戏二进制资产的方法。基本上,我有两个选择: 1. Mercurial 2.1有largefiles extension,但我不太了解它。它似乎可以解决“仓库膨胀”问题,但不能解决二进制合并冲突问题。 2. 将二进制资产保留在SVN checkout中,作为子仓库。这样我们可以锁定编辑文件并避免合并冲突,但我真的很想避免使用两个版本控制系统(特别是我不太喜欢的一个)。
有任何见解/建议或其他我没有考虑到的选项吗?
2个回答

1

正如你所猜测的那样,大文件可以满足你的需求。如果要合并二进制文件,你可以设置一个合并工具(如果有适用于你的文件类型的工具)。类似这样:

[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

你说得对,largefiles extension 可以避免仓库膨胀的问题。它的工作原理是只下载你正在检出版本所需的大文件。因此,如果你有一个50MB的文件,并且它已经被彻底编辑了10次,那么这些版本可能会在服务器上占用500MB的空间。但是,当你执行 hg update 命令时,你只会下载你需要的50MB版本。

你也说得对,largefiles 扩展程序无法帮助合并。实际上,它完全跳过了合并步骤,只会提示你如下:

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

你没有机会使用正常的合并工具。

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


这似乎是一个相当不错的扩展,但这是否意味着像 Bitbucket 这样的托管服务就被排除在外了? - user730075
2
如果你指的是锁扩展,那么是的,它不能在Bitbucket上使用,因为它没有在他们的服务器上启用。它真正的意义是在公司内部使用——你的hg将会频繁地与锁服务器通信,所以你需要让锁服务器靠近一些。 - Martin Geisler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接