Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Version control 如何在DVCS中适当管理大型艺术资产?_Version Control_Dvcs_Asset Management - Fatal编程技术网

Version control 如何在DVCS中适当管理大型艺术资产?

Version control 如何在DVCS中适当管理大型艺术资产?,version-control,dvcs,asset-management,Version Control,Dvcs,Asset Management,使用DVCS工具(如和)处理大型资产(如1000张图像、flash电影等)是否有好方法。在我看来,克隆装满4 GB资产的存储库似乎是不必要的开销,因为您将签出这些文件。如果将源代码与资产文件混合在一起,则看起来相当麻烦 在web开发环境中,有人有这样做的想法或经验吗?想法,没有经验:我确实会将代码与数据分开。假设有一组图像属于该应用程序,我会将其保存在一个集中式服务器上。在代码中,我会安排(通过显式编码)应用程序可以集成本地或远程资产。然后,用户可以首先将新图像放入本地存储,并在需要和批准时将其

使用DVCS工具(如和)处理大型资产(如1000张图像、flash电影等)是否有好方法。在我看来,克隆装满4 GB资产的存储库似乎是不必要的开销,因为您将签出这些文件。如果将源代码与资产文件混合在一起,则看起来相当麻烦


在web开发环境中,有人有这样做的想法或经验吗?

想法,没有经验:我确实会将代码与数据分开。假设有一组图像属于该应用程序,我会将其保存在一个集中式服务器上。在代码中,我会安排(通过显式编码)应用程序可以集成本地或远程资产。然后,用户可以首先将新图像放入本地存储,并在需要和批准时将其与某种(明确的)上传过程集成到中央存储。

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

分布式,两个存储库 一个回购协议中的资产和另一个回购协议中的代码

优势
  • 在web开发环境中,如果不直接使用图形文件,则不需要克隆巨人资产存储库。如果您有一个web服务器,该服务器处理与动态内容(PHP、ASP.NET、RoR等)分离的资产,并与资产回购同步,则这是可能的
缺点
  • DVCS工具不跟踪自己的存储库以外的其他存储库,因此没有任何直接的BOM(物料清单)支持,也就是说,没有明确的方法来判断两个存储库何时同步。(我想这就是我们的目的)

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

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

分布式,一个存储库 资产和代码位于同一个存储库中,但它们位于两个单独的目录中

优势
  • 代码和资产的版本控制相互交织,因此BOM是实用的。回溯是可能的,没有太多麻烦
缺点
  • 由于分布式版本控制工具跟踪整个项目结构,因此通常无法只签出一个目录
  • 您仍然存在存储库开销问题。更重要的是,您需要检查资产和代码
上面列出的两种策略仍然存在开销大的缺点,因为您需要克隆大型资产存储库。这个问题的一个解决方案是上述第一种策略的变体,即两个存储库;将代码保存在分布式VCS回购协议中,将资产保存在集中式VCS回购协议中(如SVN、Alienbrain等)

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

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

优势
  • 不会使代码存储库膨胀(例如,git经常进行文件检查,这对它很有帮助)
  • 支持灵活地处理资产,例如将资产部署到专用于资产的服务器
  • 如果在带有API的CMS上,资产应该相对容易在代码中处理
缺点
  • 没有BOM表支持
  • 没有易于扩展的版本回溯支持,这取决于资产的备份策略

我自己也在努力解决这个问题。正如您所说,对资产的GBs进行版本控制可能是一个巨大的痛苦

对于需要外部参与的项目,我发现Mercurial是一个可行的解决方案,但不是一个很好的解决方案。它会为大文件占用磁盘空间,速度可能会相当慢,具体取决于环境


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

游戏开发行业(拥有巨大的存储库)中一个相当流行的选择是使用塑料SCM

它们可以选择在文件系统而不是数据库中存储blob


也许在本文中应该提到GIT LFS(另请参见)

GIT的伸缩性似乎不如您希望添加的第三个选项那么大。这比我最初写这个答案时想象的更普遍,因为我后来在基于CMS的系统上工作了几年。