使用分支或单独的存储库来维护不向后兼容的多个代码版本的正确方法是什么?

What is the proper way to use branching or separate repositories to maintain multiple versions of code that are not backward compatible?

我为 Revit 编写插件。这些附加模块依赖于 Revit API 库。这些库随 Revit 的每个新版本(2018、2019、2020 等)而变化。不幸的是,它们不向后兼容,所以我不能在 2018 年和 2020 年使用我的加载项。这意味着我为 2018 年、2019 年和 2020 年维护我自己的代码的单独存储库。我目前正在使用拉取请求,这样如果我在 2018 年进行了更改,我可以将其移至 2019 年和 2020 年。问题是,当遇到请求时,它会将我的 2019/2020 库更新回引用 2018 年的库。然后我必须返回并确保它引用了正确的库。

每次我需要将更改推送到其他版本时,我应该如何避免这个问题?

您确定您的 2018 加载项不能在 Revit 2020 中使用吗?

在很多情况下,即使不是大多数情况,情况也恰恰相反。

一般来说,您也可以在以后的版本中使用为以前版本的 Revit 编译的附加模块。

如果您调用的 Revit API 功能在不同版本之间发生了变化,您可以通过编译早期版本的 Revit 并添加 .NET 运行时功能来处理该问题,以在运行时检查是否调用Revit 的旧版本或新版本 API。更改的调用可以在运行时为新版本动态更新。

查看 The Building Coder Multi-Version Add-in 以获得完整的实施示例。

话虽如此,我还是完全同意你的问题本身;在许多情况下,您需要为每个 Revit 版本单独更新加载项,以避免复杂性并增强代码可读性。为此,我完全同意Ôrel 为每个版本维护一个单独的分支并将更新合并到其他分支。

我写的插件也有同样的问题。由于 API 更改,我必须根据与插件关联的年份制作单独的版本。我设置了一个解决方案,每个版本都有单独的项目,并共享代码和库,以减少重复代码的数量。不幸的是,我是在创建第二个版本之后设置的,所以并不是所有的代码都被适当地细分了。但是,这应该让您了解如何设置它。您可以在 github 存储库中看到:CreateSheets.

请注意,虽然这确实减少了代码量,但需要做一些额外的工作,因为对共享代码的更改需要考虑每个版本。