【问题标题】:Having 2 products from one SVN project - how to keep certain changes only for one product?来自一个 SVN 项目的 2 个产品 - 如何只为一个产品保留某些更改?
【发布时间】:2012-08-18 05:48:19
【问题描述】:

所以我们有应用程序 Pluto 和应用程序 Goofy - 两者都使用相同的 SVN 项目。其实只有一点配置差异。

现在我面临这个问题:来自 Pluto 的客户想要一些新的变化 - 详细地说,他想要为 Javascript 和我们在 JSF 环境中使用的一些 xhtml 标签添加功能。基本上,这是他要求的一种改进 javascript 的方式 - 旧功能必须仍然存在。但是:新功能可能会破坏 Goofy 的某些部分,因为 Goofy 是一个更大的应用程序并且难以测试。实际上,高飞是冥王星的超集——例如。 Goofy 可以为 Pluto 做任何事情——但实际上它只是为了测试,最终的 Product 驻留在 Pluto 中。

需要更改的文件是相当静态的,我认为对其中一个文件的最后一次更改是半年前。在过去的两年里,变化肯定不会超过几个。

我的想法是为 Pluto 创建一个分支,在其中实现对 javascript 和 xhtml 标签的所有更改。开发人员将在主干上开发,我将始终在部署之前合并来自分支的更改(这可能会自动完成)。 但是:本地开发有个问题——因为是trunk,而且新功能只在分支上,所以在本地为Pluto开发新功能是不可用的。

另一种方法是使用例如如果 application==Goofy 加载 javascript Goofy,反之亦然。

或者最后 - 尝试和错误,例如只需合并所有更改并修复错误 :-)

你们会如何决定呢?

【问题讨论】:

    标签: svn configuration merge branch project


    【解决方案1】:

    我会使用不同的分支,并接受在一周中的任何一天使用 if application==Goofy 等特殊技巧进行合并带来的不便。当您的程序的复杂性增加并且可能添加更多应用程序时,后一种实现肯定会咬住您。

    另一种可能更适合您的方法是重构您的代码并将应用程序的核心部分分解为自己的项目。然后让每个应用程序分别引用核心项目。例如,核心部分可能包含业务逻辑,而 Goofy/Pluto 处理 GUI 和/或某些核心部分的特殊实现。您的 SVN 树可能类似于:

    trunk
      |--- Core stuff
      |--- Project Pluto
      |--- Project Goofy
    

    一种更复杂但非常灵活的方法是将核心内容移至其自己的存储库。然后,您可以使用svn:externals 将核心部分包含到您的项目中。这将使您能够将 Pluto 和 Goofy 锁定到 Core Stuff 的某些修订版中。因此,您可以更新核心内容以添加一个项目所需但对另一个项目有害或不受欢迎的更多功能。我已经在行动中看到了这一点,并且效果很好。我们有非常过时的遗留代码,但即使在遗留项目的开发停止后核心部分已经升级多年,但仍然可以编译和工作。

    Core trunk
      |--- Core stuff (rev 123)
    
    Application trunk
      |--- Project Pluto (Core rev 111)
      |--- Project Goofy (Core head)
    

    如果您想尝试使用最后一个选项,博客文章 svn:externals 应该会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 2022-10-17
      • 2018-01-27
      • 1970-01-01
      相关资源
      最近更新 更多