gpt4 book ai didi

svn - 有来自一个 SVN 项目的 2 个产品 - 如何只为一个产品保留某些更改?

转载 作者:行者123 更新时间:2023-12-04 21:08:18 27 4
gpt4 key购买 nike

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

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

需要修改的文件比较静态,我想其中一个文件的最后一次修改是半年多以前了。在过去的两年里,肯定不会有太多变化。

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

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

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

你们会如何决定?

最佳答案

我会使用不同的分支并接受合并带来的不便,而不是使用特殊技巧,如 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如果您想尝试最后一个选项,应该会有帮助。

关于svn - 有来自一个 SVN 项目的 2 个产品 - 如何只为一个产品保留某些更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12079312/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com