代码之家  ›  专栏  ›  技术社区  ›  Guss

Adobe Flash项目的版本控制

  •  16
  • Guss  · 技术社区  · 15 年前

    我正在处理一个非常复杂的flash项目,它是我们为客户使用而部署的一系列服务的一部分。对于我们的大多数软件源(Java、PHP、JavaScript、HTML和其他语言中的一些支持脚本),我们使用Sudio进行版本控制和管理,因此我们对Flash项目也做同样的事情,即使我们从版本控制中获得了很少的好处(除了能够恢复以前的版本),因为FLA文件被存储为只是二进制文件,我们无法从中获得有意义的差异。

    我们将尽可能多的代码放入文件中,我们可以使用Subversion来正确地管理这些文件,但是由于我们的体系结构和部署策略的要求(由于我们的客户需求,这两种方法都无法更改),我们仍然保留了大量需要管理的FLA文件。

    我看过Adobe版本提示,虽然我不太了解它在版本控制方面的作用,但是将我们的Flash项目移到版本提示上托管会比我现在从Subversion获得更好的控制吗?

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

    5 回复  |  直到 14 年前
        1
  •  15
  •   fenomas    15 年前

    我自己也经历过这一切,除了:

    1. 在佛罗里达没有密码,永远
    2. 在适当的情况下,将内容语义地划分为单独的fla
    3. 为flas创建一个更改文档,并为每个更改输入注释。

    第一点很明显。第二个问题是要认识到,fla是一个二元blob,它保存了所有的视觉资产,并不能很好地处理版本控制,但您可以认识到这样一个事实,即某些内容经常更改,而其他内容则往往只创建一次,然后再单独创建。通过将您的资产划分为不同的fla,您可以将大部分更改保留为少量不稳定的fla,并且稳定和不稳定内容之间的差异将反映在您的版本文件中。

    注意,即使您不能在运行时加载资产,编译时共享仍然允许您将资产划分为任意数量的fla。(编译时共享经常被忽视-如果你不熟悉它,打开movieclip的属性,并查看底部的“源代码”部分。)如何划分东西将取决于你的项目。我能建议的最好的方法是在语义上进行划分——也许每个字符有一个fla,或者每个部分有一个fla,或者每个接口元素有一个fla,等等。与所有开发一样,目标是将相关资产分组并消除重复。

    第三点是,由于差异是不可能的,所以没有办法保存变更文档。我的首选方法是将fla签入版本控制,并在签入说明中记录所有更改,但是这些更改也可以在单独的文档中。(请注意,保持每个fla中的库的有序性是至关重要的,否则阅读更改描述的人将很难找到更改。)但是,由于这可能会对某些内容造成痛苦,因此将某些fla指定为“不稳定”也很有用,而不必费心更改列表。但是如果这些文件对其他文件有很大的依赖性,你会后悔的。

    不幸的是,这是我迄今为止所发现的全部。Adobe已经讨论过在未来的版本中改为基于文本的FLA格式,但在这之前,还没有一个简单的解决方案。

        2
  •  11
  •   Boyd    14 年前

    Adobe对此的回答是在新的CS5闪存中。使用“另存为”并从“类型”下拉列表中选择.xfl。现在您可以处理您的项目,并通过SVN将其签入。我仍然会把你的代码作为文件分出来,但这样你的库资产也会被跟踪。它基本上保持了XML标记中的所有内容,有点像FlexMXML。我认为这是你最好的选择。

        3
  •  2
  •   DanK    15 年前

    听上去,由于外部的需求,你被fla文件卡住了,但是,以防万一…

    如果你正在构建一个代码密集的flash项目,我将使用纯actionscript或flex方法,只使用.fla文件来实现它们的优点(基于时间线的动画)

    flex builder/flash builder是构建flash项目的良好环境,其中所有代码都是源代码管理友好的文件格式。

    我们正在将所有基于fla的媒体播放器转移到mxml(其中flex-ui组件很有用)和纯actionsicpt项目。源头控制的好处是巨大的。

    如果这是不可能的,那么我担心你唯一能做的就是尽可能多地从flas中移出东西-二进制格式根本不支持源代码管理。

    忘记版本提示-Adobe不再开发它(它不包含在新的CS5包中)

        4
  •  1
  •   Sam Bisbee    15 年前

    根据我对Adobe版本提示的理解,它不会为您提供任何超出SVN提供的内容。(当然,我只听过版本提示的恐怖故事,实际上还没有使用过。)

    在与SVN合作过大型闪存项目(大型团队和大型部署)之后,我能给您的最好建议是:

    • 好吧,你的客户要求所有这些fla,但为什么?您可能已经完成了这项工作,但是试着稍微推迟他们的技术需求——他们认为他们从这个需求中获得了什么?

    • 指定一个人作为Flash应用程序的发布管理器。他们将负责从SVN中签出正确的代码,构建它,并确保它进入到一般的应用程序部署中。它们还将响应知道哪个修订是在哪个环境中进行的(这可以很容易地实现自动化)。

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

    • 如果可能的话,把团队分成小块。这减少了在佛罗里达州发生冲突性变化的机会,增加了每个人都知道发生了什么事情的机会。

    • [更多的是带宽说明,较少涉及这个问题]如果可能的话,将fla视为库或sdk。如果他们的需求接近“每页一个子fla”和一个主fla,那么就有额外的子fla来保存资产/小部件。这样,您的页面fla只保存特定于页面的代码,并且您不会在每次“切换页面”时重新加载小部件。(假设页面切换之间没有浏览器刷新。)

    可能值得注意的是,这些主要是非技术性的解决方案。对于在版本控制系统中处理二进制文件的问题,我还没有找到一个“一次性的解决方法”,特别是那些真正是源代码的二进制文件。这才是真正的关键:以专有二进制格式存储源代码的想法是糟糕的巫毒。

        5
  •  1
  •   Taco Suave    14 年前

    我一直在想办法解决这个问题,这里有一个可能的解决方案。.fla是实际的文件系统。如果将.fla扩展名替换为.zip,则可以解压缩并公开未压缩的文件,这与Mac上的“显示包内容”并无不同。所有的库内容都位于一个库目录中,每个movieclip由一个XML文档表示,每个层获取一个节点,层中的帧被表示为子节点。还有一个.xfl文件,它是.fla的未压缩版本,只要.fla的所有未压缩内容与.xfl位于同一目录中,就可以在flash中启动它。

    从技术上讲,您应该能够使用.xfl文件,在Subversion中跟踪和维护所有库内容。

    推荐文章