2009-09-21 119 views
16

我正在使用一个非常复杂的Flash项目,这是我们为客户使用而部署的全套服务的一部分。对于我们的大多数软件源代码(Java,PHP,Javascript,HTML和其他语言的一些支持脚本),我们使用Subversion进行版本控制和管理,因此我们对Flash项目也做同样的事情,尽管我们从版本中获得的好处很少控制FLA文件(除了可以恢复到以前的版本)作为二进制文件存储,我们无法获得有意义的差异。Adob​​e Flash项目的版本控制

我们将尽可能多的代码放入AS文件中,我们可以使用Subversion进行正确管理,但由于我们的体系结构和部署策略的要求(我们无法根据客户需求进行更改),因此我们仍然保留我们需要管理的大量FLA文件。

我看过Adobe Version Cue,虽然我不明白它在版本控制方面做了什么,但是将我们的Flash项目移动到版本提示上的主机会给我更好的控制,然后我目前从Subversion获得?

另外 - 如果人们可以分享他们关于Flash项目版本控制的经验和建议,它将会非常有帮助。

回答

15

我这个挣扎的自己,我不能告诉你比其他任何东西:

  1. 在FLA文件没有代码,永远
  2. 鸿沟内容语义到酌情单独FLA文件
  3. 制作FLA的变更文件,并为每一项变更输入一个注释。

第一点很明显。其次是要认识到,FLA是二进制斑点,它拥有所有视觉资产,并且在版本控制方面表现不佳,但您可以认识到一些内容频繁更改而其他一些内容倾向于创建一次的事实然后一个人留下。通过将您的资产分成不同的FLA,您可以将大部分更改保留在少量不稳定的FLA中,稳定和不稳定内容之间的差异将反映在版本化文件中。

请注意,即使您无法在运行时加载资源,编译时共享仍然可以让您将资产划分为任意数量的FLA。 (编译时共享经常被忽视 - 如果您不熟悉它,请打开MovieClip的属性并查看底部的“源代码”部分。)如何划分内容取决于您的项目。我可以建议的最好的做法是在语义上对各个部门进行划分 - 也许每个角色都有一个FLA,或者每个部分都有一个FLA,或者每个界面元素都有一个FLA等。与所有开发一样,目标是将相关资产分组并重新排列。

第三点是,由于差异是不可能的,因此保存更改文档是没有办法的。我最喜欢的方法是将FLA检查为版本控制,并记录签入说明中的所有更改,但更改也可能位于单独的文档中。 (请注意,将库保存在每个FLA中是非常重要的,否则某人阅读变更描述将无法找到变更内容。)但是,由于这对于某些内容来说可能很痛苦,因此将某些FLA指定为“不稳定“,而不会为更改列表而烦恼。但是如果这些文件对其他文件有很大的依赖性,那么以后你会后悔的。

不幸的是,这是我迄今为止发现的。在未来的版本中,Adobe已经谈到了转换为基于文本的FLA格式,但在到达之前,没有简单的解决方案。

+0

你的笔记非常有用,谢谢。我不可能让开发人员维护一个更改文档 - 开销太大,没有人会这么做(严重或者根本不会)。我的目的是在不增加开发人员开销的情况下获得控我有足够的时间让人们在他们的提交中写出有意义的评论:-(。 如果不是因为文件倾向于被弃用,删除和替换为新代码,更改日志可能是一个很好的更改文档 – Guss 2009-09-21 16:46:36

+0

好吧,你必须和你一起工作,我没有保留详细的变更文件,直到一个文件或多或少的功能完整 - 所以我只记录了修改和错误修正,而不是最初的开发。好的 - 正如我所说的那样,这就是我记录我的变化的地方。 – fenomas 2009-09-21 17:27:45

+0

谢谢fenomas - 我会接受你的答案,因为(一)它的最详细和最好;(二)没有人拿出一些新的东西在一段时间;和(三) - 我有点远离整个问题... – Guss 2011-01-06 19:43:43

1

从我对Adobe Version Cue的理解中,除了svn给你的东西之外,它不会给你任何东西。 (当然,我只听说过Version Cue的恐怖故事,但实际上并没有使用它。)

在与svn开展过大型Flash项目(大型团队和大型部署)之前,我可以给出最好的建议你是:

  • 好的,你的客户要求所有这些FLA,但为什么?您可能已经完成了这项工作,但是可以尝试稍微回退技术要求 - 他们认为他们从这个要求中获得了什么?

  • 指定一个人成为Flash应用程序的发布管理器。他们将负责检查svn的正确代码,构建它,并确保它进入通用应用程序部署。他们也会知道哪个版本在哪个环境下(这可以很容易实现自动化)。

  • 将尽可能少的代码和资产放在FLA中。您应该从外部来源加载图像和其他资源,然后将它们附加到适当的MC和Sprites。

  • 如果可能,请将团队保持在小型离散块中。这减少了FLA中冲突变化的可能性并增加了每个人都知道发生了什么的机会。

  • [更多的带宽说明,与此问题相关性较小]尽可能将FLA视为库或SDK。如果他们的需求接近主FLA的“每页一个子FLA”,则需要额外的子FLA来存放资产/小部件。这样您的页面FLA只保存页面特定的代码,并且每次“切换页面”时都不会重新加载小部件。 (假设没有浏览器页面交换机之间耳目一新。)

这也许值得一提的是,这些在很大程度上是非技术解决方案。对于在修订控制系统中使用二进制文件的问题,我还没有找到“一枪杀手” - 特别是真正源代码的二进制文件。这真的很重要:将源代码以专有二进制格式存储的想法,只能编译成不同的专有格式,这是糟糕的巫术。

+0

感谢您的答案。关于FLA的要求 - 它更多的是对某些namin g输出SWF文件的约定,我们的客户通过它们的代码调用它们,并且由于需要向后兼容性,我们无法更改部署体系结构。 – Guss 2010-04-25 22:53:59

2

这听起来像你被卡住FLA文件,由于外部需求,但是,万一......

如果你正在构建一个码重闪光的项目,我会用纯ActionScript或Flex去只使用.fla文件(基于时间轴的动画)

Flex Builder/Flash Builder是构建Flash项目的理想环境,其中所有代码均采用源代码管理友好文件格式。

我们正在将所有基于FLA的媒体播放器转移到MXML(其中Flex UI组件有用)和纯ActionScipt项目。源代码控制的好处是巨大的。

如果这是不可能的,那么恐怕你唯一能做的就是尽可能多地从FLA中移出 - 二进制格式根本不是源代码控制友好的。

忘记版本线索 - Adob​​e不发展任何更多(这不包括在新的CS5套件)

1

我一直在试图想出一个办法来解决这个同样的问题,这里是一个可能的解。 .fla是实际的文件系统。如果使用.zip替换.fla扩展名,则可以解压并展开与mac上的“显示包内容”不同的未压缩文件。所有的库内容驻留在一个库目录中,每个动画片段由一个xml文档表示,每一层获取一个节点,一个图层中的帧表示为子节点。还有一个.xfl文件,它是.fla的未压缩版本,只要将.fla的所有解压缩内容与.xfl位于同一目录中,就可以在Flash中启动。技术上来说,您可以使用.fla格式应该能够在.xfl文件中工作,所有的库内容都将在Subversion中进行跟踪和维护。

11

Adob​​e对此的回答是在新的CS5 Flash中。使用“另存为”并从类型下拉菜单中选择.xfl。您现在可以处理您的项目并通过SVN进行检查。我仍然会在.as文件中分解您的代码,但这样您的库资产也会被跟踪。它基本上保留了所有的XML标记有点像flex mxml。我认为这是你最好的选择。

+0

谢谢,我不知道这一点。 – 2011-04-05 10:57:11