背景知识
有时主题/插件需要进行仅与最新版本的 Discourse 兼容的更改。在这种情况下,可以指示旧版本的 Discourse 使用插件的旧“固定”版本。
这是通过在主题/插件仓库的根目录中使用 .discourse-compatibility 文件来实现的。这是一个 YAML 文件,其中键指定 Discourse 核心版本,值代表你的主题/插件的关联版本。
Discourse 核心版本可以使用 < 和 <= 运算符指定。由于历史原因,<= 是默认设置,但通常使用 < 会更有意义。
固定主题/插件版本
例如,如果 Discourse 核心在 3.2.0.beta2-dev(在 version.rb 中找到)期间进行了更改,并且你的插件/主题开始依赖它,那么你需要在 .discourse-compatibility 文件中添加一个条目,如下所示:
< 3.2.0.beta2-dev: abcde
其中 abcde 是你的插件的“遗留”提交哈希的引用,应在旧版本的 Discourse 上使用。
现在,任何使用旧版本 Discourse(例如 3.2.0.beta1 或 3.1.4)的用户将使用你的主题/插件的 abcde 版本。任何使用 3.2.0.beta2-dev 或更高版本的用户将继续使用最新版本。
多个条目
随着时间的推移,你可以向 .discourse-compatibility 文件添加多行。Discourse 总是会选择“最低”的、与当前 Discourse 核心版本匹配的规范。文件中行的顺序在技术上并不重要,但我们建议将最新的条目放在顶部。
为旧 Discourse 版本“反向移植”更改
假设有一个 .discourse-compatibility 文件,其中有两个不同的版本规范固定到特定的插件提交:
< 3.2.0.beta1-dev: commithashfordiscourse31
< 3.1.0.beta1-dev: commithashfordiscourse30
如果你需要在 Discourse 3.1 中“反向移植”一个更改,你可以这样做:
-
从旧提交创建一个分支(
git checkout -b my_branch_name commithashfordiscourse31) -
提交你的更改并推送到 origin。如果你使用 GitHub 的分支保护功能,你可能希望保护此分支免遭意外删除
-
在主分支上更新
.discourse-compatibility文件,使其现在指向 3.1 支持分支上的新提交
实际示例
这是来自 discourse-solved 插件的一个真实的 .discourse-compatibility 文件。请注意,在撰写本文时,它仍然使用“遗留”语法,没有明确的 < 或 <= 运算符。因此,每一行都会自动解释为 <=。
此文档是版本控制的 - 在 github 上建议更改。