【问题标题】:Best version control system for a mobile phone application?手机应用程序的最佳版本控制系统?
【发布时间】:2009-05-21 03:21:16
【问题描述】:

我正在开发一个手机应用程序,该应用程序根据它们提供的功能定位到许多移动设备。将有一个所有手机都应支持的基本功能集,然后会有取决于特定手机集的附加功能。

如何根据版本控制系统管理这样的代码库?

我有使用 CVS 和 VSS 的经验,但两者都不太适合我对此类应用程序的需求。我要做的最后一件事是为每个设备集分支代码。

让我通过一个例子来更清楚地说明这一点。假设我正在使用 MIDP 2.0 开发 J2ME 应用程序。这是我希望所有支持 MIDP 2.0 的手机都具备的基本功能集。最重要的是,我会使用他们的 SDK 将这个应用程序扩展到特定的手机组。例如。 Nokia S40、Nokia S60、Sony Ericsson、Blackberry 等。所有这些都提供了额外的功能,让您可以在基础应用程序之上构建更多功能,而且大多数情况下,这些功能会影响您从 UI 到核心逻辑的整个代码库。

实现此目的的一种方法是将构建系统与预处理器标志结合使用,并尝试将差异区分开来,以免产生过多的依赖关系。这有时会变得相当复杂。我想知道是否有更简单的方法来使用智能源代码控制系统来处理这个问题......

【问题讨论】:

    标签: version-control mobile


    【解决方案1】:

    我会看看 Subversion 的 svn:externals

    使用 svn 1.5,您可以对目录使用相对引用,并且 svn 1.6 支持基于文件的外部。

    例如像这样的结构,

    • /Phone1/Base
    • /电话1/功能1
    • /电话1/功能2
    • /Phone2/Base
    • /电话2/功能1
    • /电话2/功能3

    使用 svn:externals 很容易实现。

    在 Subversion 中,您的存储库结构非常灵活,您可以通过以下方式(众多)进行布局:

    • 主干/功能/底座
    • 主干/功能/功能1
    • 主干/功能/功能2
    • 主干/功能/功能2
    • trunk/Phones/Phone1(带有 svn:externals 到 Base、Feature1、...)
    • trunk/Phones/Phone2(带有 svn:externals 到 Base、Feature3、...)

    不过有一个提示:确保为每个外部引用使用特定的 Subversion 版本,刚开始时它可能看起来并不重要,但 6 个月后它会:)

    【讨论】:

    • 感谢您的指点,这对于我们正在处理的应用程序非常有用,该应用程序具有多个输入库和大量不同的签出以将源代码拉入某些构建。
    • 感谢您的提示。这可能会奏效。我目前正在重构代码以将其拆分为核心库和特定于手机的内容。之后会试试这个。
    • 不客气,我不确定的一件事是你所追求的复杂程度;如果每部手机都有一组已定义的功能,并且您在代码中手动声明它们,那么 svn:externals 应该可以自己正常工作,但是如果您想要为每部手机进行一些自动构建过程,即不必(在代码中)声明每个功能,那么您可能仍然需要查看一些构建任务以与 svn:externals 一起工作。例如您只需在外部定义功能,构建脚本会计算出要包含/链接/编译的内容。
    【解决方案2】:

    我喜欢 Subversion 用于没有很多开发人员的项目。从您的问题陈述来看,在我看来,您应该能够通过良好的构建系统实现您想要的。所以我认为源代码控制本身不会有太大的不同。但我可能误解了你的问题。

    赛义德·易卜拉欣·哈希米

    我的书:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build

    【讨论】:

      【解决方案3】:

      我认为 VCS 不会解决您的问题。

      您最好的选择可能是尽可能抽象出手机特定的功能和/或使用插件类型模型。

      我只使用过 Subversion、CVS、Starteam 和 VSS。无论如何,分支都是一种痛苦……尤其是如果您有多个活动分支。您将无法进行持续的合并、分支比较以及尝试跟踪您是否对所有分支进行了更改。

      【讨论】:

      • 我不明白? svn:externals 有什么问题?我们使用它非常成功!
      【解决方案4】:

      如果您将代码组织成一些核心模块和一些依赖于核心模块的特定于手机的模块,那么您使用哪个 VCS 并不重要。无论如何,我都会推荐一个去中心化的 VCS(Mercurial、Bazaar、Git)。

      您可以考虑描述您希望如何实现您想要的(具有不同功能集的不同应用版本)以获得更合理的建议

      【讨论】:

        【解决方案5】:

        如果您使用 Perforce,您可以在软件仓库和工作区之间使用不同的映射,并执行以下操作:

        depot/
          common/
          platform1/
            someportedfile
          platform2/
            someportedfile
        

        并将其映射到您的工作区中:

        platform1/
          someportedfile
          common/
        platform2/
          somtportedfile
          common/
        

        【讨论】:

          猜你喜欢
          • 2011-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-09
          相关资源
          最近更新 更多