使用移动版本进行 subversion 分支的策略

Posted

技术标签:

【中文标题】使用移动版本进行 subversion 分支的策略【英文标题】:Strategy for branching in subversion with mobile releases 【发布时间】:2011-04-21 01:51:28 【问题描述】:

我正在为移动设备开发一系列应用程序,我们称它们为 Orange、Cherry 和 Pear。现在,由于我对黑莓的熟悉,我选择开始在黑莓平台上实现这三个应用程序中的第一个,Orange。我找到了一种将许多黑莓平台(因为它们在不同的 BB 操作系统中使用相对相同的 API,但有一些例外)集成到同一个代码库中的方法。目前,我的代码库看起来像这样:

Orange/
  trunk/
   src/
     ... orange's source tree...
  branches/
    1.0/
     ... orange's source tree as it looked at release 1.0 ...
  tags/
     1.0.0/
     1.1.0/

所以,基本上,我在分支中使用基于版本的方法。然而,现在我们希望将此应用程序迁移到 android 平台(并且在某个时间点,可能会迁移到其他移动甚至桌面平台)。所以,我的问题是,跨多个平台使用单个应用程序进行分支的最佳方法是什么?我已经阅读了Branching Strategies,以及一些分支策略网页(例如http://www.codinghorror.com/blog/2007/10/software-branching-and-parallel-universes.html),但我仍然不相信基于具有“通用”主干的分支(例如,如最后一个链接中描述为“分支”每项技术”)。

我仍然不相信的原因是我相信基于版本的分支策略。这似乎合乎逻辑;如果您想维护单独的开发阶段,那么分支似乎是执行此操作的理想方式。如果我有所有三个平台之间“通用”的代码方面,那么我决定制作一个 android 版本,我是否将所有代码从 common 和 android 主干分支以制作一个新的发布标签?或者,我是否也将所有代码保留在 android 和 blackberry 分支的“common”分支中?

我想也许我可以做的另一件事是创建单独的项目,例如 orange-blackberry 和 orange-android。然而,这可能会使我的 svn 存储库变得混乱,因为我们将所有项目都保存在同一个存储库中。因此,不可避免地,我将拥有 orange-blackberry、orange-android、cherry-android、cherry-blackberry、pear-android、pear-blackberry,以及用于我创建的任何其他应用程序的一系列项目文件夹。

所以,我正在寻找有关管理所有这些混乱的最佳方法的反馈。另外,如果你能提出一些关于从我当前的实现转移到新的实现的逻辑的想法(即我应该使用什么 svn 命令来维护历史),那将非常感激。

【问题讨论】:

【参考方案1】:

BlackBerry Java 代码是 j2me,因此源代码必须符合 Java 1.3。 Android 可以使用 Java 功能一直到 Java 6。如果您希望您的应用程序看起来不错,您将使用 RIM 专有的 UI 组件 (net.rim.device.*),而这些在 Android 上不可用。

我不会将应用程序的 Android 版本视为 BlackBerry 的一个分支。你应该从头开始。这些平台将共享非常少的代码,并且可以共享的代码最好放入两个项目合并的库 jar 中。

【讨论】:

嗯,实际上我确实将一堆通用代码移到了一个单独的库中。我想要避免的事情是在我的 svn 存储库中出现这种大规模的项目爆炸。我想我可以将它们分组到存储库中的另一个目录下,而不是将所有水果项目放在 svnroot/ 级别。 不过,我很想听听还有什么其他建议。我假设其他人对部署到多个平台的应用程序也有同样的问题——我的意思是,这并不是移动开发所独有的。有哪些策略可以处理 linux/windows/unix/osx 的多个版本并保持这些版本同步?

以上是关于使用移动版本进行 subversion 分支的策略的主要内容,如果未能解决你的问题,请参考以下文章

在 Subversion 中合并分支时的冲突预防

移动没有历史记录的 Subversion 存储库

Subversion存储库中“分支”,“标记”和“主干”的含义是什么?

如何对Git的分支进行管理

Git工程开发实践——Git分支管理策略

SVN分支管理策略个人见解