有没有什么好的方法可以使用诸如hg和git之类的 DVCS 工具来处理大型资产(即 1000 张图像、flash 电影等) 。正如我所看到的,克隆充满 4 GB 资产的存储库似乎是不必要的开销,因为您将检查文件。如果您将源代码与资产文件混合在一起,这似乎相当麻烦。
有没有人在 Web 开发环境中这样做有任何想法或经验?
这些是我对这个主题的一些想法。最后,您可能需要将资产和代码尽可能分开。我可以想到几种可能的策略:
一个存储库中的资产和另一个存储库中的代码。
DVCS 工具不会跟踪除了自己的存储库之外的其他存储库,因此没有任何直接的 BOM(材料清单)支持,即没有明确的方法来判断两个存储库何时同步。(我想这就是git-submodule或repo的用途)。
示例:艺术家在一个存储库中添加了一张新图片,程序员添加了使用图片的功能,但是当有人必须回溯版本时,他们被迫以某种方式自行跟踪这些更改。
资产存储库开销,即使它只影响使用它的人。
资产和代码位于同一个存储库中,但它们位于两个单独的目录中。
上面列出的两种策略仍然存在开销较大的缺点,因为您需要克隆大型资产存储库。这个问题的一个解决方案是上面第一个策略的变体,两个存储库;将代码保存在分布式 VCS 存储库中,将资产保存在集中式 VCS 存储库中(例如 SVN、Alienbrain 等)。
考虑到大多数图形设计师如何使用二进制文件,通常不需要分支,除非确实有必要(新功能需要大量资产,直到很久以后才需要)。缺点是您需要找到一种方法来备份中央存储库。因此,第三种策略:
存储库中的代码照常,资产不在存储库中。资产应该放在某种内容/媒体/资产管理系统中,或者至少放在定期备份的文件夹中。这假设很少需要回溯带有图形的版本。如果需要回溯,则图形更改可以忽略不计。
想法,没有经验:我确实会将代码与数据分开。假设有一组属于应用程序的图像,我会将其保存在中央服务器上。在代码中,我会安排(通过显式编码)应用程序可以集成本地或远程资产。然后,贡献者可以首先将新图像放在他们的本地存储中,并在需要和批准时将其与某种(显式)上传程序集成到中央存储中。
我自己也为此苦苦挣扎。正如您所说,对 GB 的资产进行版本控制可能是一个巨大的痛苦。
对于需要外部参与的项目,我发现 Mercurial 是一个可行的解决方案,但不是一个很好的解决方案。它会占用大文件的磁盘空间,并且根据情况可能会相当慢。
对于我的内部设计工作,我更喜欢使用简单的同步工具(rsync、synctoy 等)来使服务器/机器之间的目录保持最新,然后手动进行版本控制。我发现我很少需要对主要修订之外的任何内容进行版本控制。
也许应该在这种情况下提到 GIT LFS(另请参阅Atlassian 的 git lfs 教程)
在游戏开发行业(拥有庞大的存储库)中,一种相当流行的选择是使用 Plastic SCM。
他们可以选择将 blob 存储在文件系统而不是数据库中。