如何在DVCS中妥善管理大型艺术资产?

时间:2009-08-16 16:20:54

标签: version-control dvcs asset-management

是否有任何良好的方式可以使用诸如hggit之类的DVCS工具处理大型资源(即1000张图像,闪光电影等)。在我看来,克隆充满4 GB资产的存储库似乎是一个不必要的开销,因为你将检查文件。如果您将源代码与资产文件混合在一起,这似乎相当麻烦。

有没有人在网络开发环境中有任何想法或经验?

5 个答案:

答案 0 :(得分:35)

这些是我在这个主题问题上的一些想法。最后,您可能需要将资产和代码尽可能分开。我可以想到几种可能的策略:

分布式,两个存储库

一个仓库中的资产和另一个仓库中的代码。

优点

  • 在Web开发环境中,如果您不直接使用图形文件,则无需克隆巨型资产存储库。如果您的Web服务器处理与动态内容(PHP,ASP.NET,RoR等)分开的资产并且正在与资产仓库同步,​​则可以这样做。

缺点

  • DVCS工具不跟踪他们自己的其他存储库,因此没有任何直接的BOM(物料清单)支持,即没有明确的方法来判断两个存储库何时同步。 (我想这是git-submodulerepo的用途。)

    示例:艺术家在一个存储库中添加了一张新图片,程序员添加了使用图片的功能,但是当有人必须回溯版本时,他们不得不以某种方式自行跟踪这些更改。

  • 资产存储库开销,即使它只会影响那些使用它的人。

分布式,一个存储库

资产和代码驻留在同一个存储库中,但它们位于两个单独的目录中。

优点

  • 代码和资产的版本化交织在一起,因此BOM很实用。回溯是可能的,没有太多麻烦。

缺点

  • 由于分布式版本控制工具会跟踪整个项目结构,因此通常无法检出一个目录。
  • 您仍然遇到存储库开销问题。更重要的是,您需要查看资产和代码。

由于您需要克隆大型资产存储库,因此上面列出的两种策略仍然具有开销较大的缺点。这个问题的一个解决方案是上面第一个策略的变体,两个存储库;将代码保存在分布式VCS存储库中,将资产保存在集中式VCS存储库中(例如SVN,Alienbrain等)。

考虑到大多数图形设计师如何使用二进制文件,除非确实需要,否则通常不需要分支(新功能需要大量资产,直到很久以后才需要)。缺点是您需要找到备份中央存储库的方法。因此,第三个策略:

非资源库资产(或CMS中的资产)

存储库中的代码与往常一样,资产不在存储库中。资产应该放在某种内容/媒体/资产管理系统中,或者至少放在经常备份的文件夹中。这假设很少需要使用图形来回溯版本。如果需要回溯,那么图形变化可以忽略不计。

优点

  • 不会膨胀代码存储库(对于例如git很有用,因为它经常进行文件检查)
  • 支持灵活处理资产,例如将资产部署到专用于资产的服务器
  • 如果在使用API​​的CMS上,资产应该相对容易处理代码

缺点

  • 无BOM支持
  • 没有简单的广泛版本的反向跟踪支持,这取决于资产的备份策略

答案 1 :(得分:3)

思考,没有经验:我确实会从数据中分离代码。假设存在一组属于应用程序的图像,我会将其保留在集中式服务器上。在代码中,我将安排(通过显式编码)应用程序可以集成本地或远程资产。然后,贡献的人可以首先在他们的本地商店中放置新图像,并在需要和批准时将其与某种(显式)上传程序集成到中央商店。

答案 2 :(得分:2)

我自己也在努力解决这个问题。如你所说,版本化GB的资产可能是一个巨大的痛苦。

对于需要外部参与的项目,我发现Mercurial是工作解决方案,但不是很好。它会占用大型文件的磁盘空间,并且根据具体情况可能会相当慢。

对于我的内部设计工作,我更喜欢使用简单的同步工具(rsync,synctoy,其他)来使目录在服务器/机器之间保持最新,然后手动进行版本控制。我发现除了重大版本之外,我很少需要进行版本控制。

答案 3 :(得分:0)

在游戏开发行业(具有大量存储库)中,一个相当流行的选择是使用Plastic SCM。

它们具有将blob存储在文件系统而不是数据库中的选项。

https://www.plasticscm.com

答案 4 :(得分:0)

也许在这种情况下应该提到GIT LFS(另请参见Atlassian's git lfs tutorial