从 Gitea 和 Forgejo 链接到工作项¶
Gitea 和 Forgejo 可以把另一个系统设为仓库的 外部工单系统(external issue tracker)。把它指向
Specivo 后,代码托管平台上提交信息、合并请求和评论里的每个工作项引用(ACME-12 或 #12)都会变成
指向 Specivo 中对应工作项(Issue)的链接,仓库的 Issues 标签页也可以直接打开你的 Specivo 项目,
而不是平台自带的工单。Gitea 和 Forgejo 的相关设置相同,只是位置略有不同;下文使用 Gitea 的英文标签
(Forgejo 的写法是句首大写,例如“Use external issue tracker”)。
这与仓库集成的方向相反:仓库集成是把平台的提交和合并请求发送到 Specivo。两者可以 配合使用。
Specivo 的工作项地址¶
每个工作项在你的 Specivo 地址下都有一个页面,路径为 /issue/{key}/:
- 地址中的编号不区分大小写:
/issue/acme-12/打开的是同一个工作项。 - 已移动到其他项目的工作项,仍可用原编号打开。
- 管理员重命名项目标识后,旧编号下的工作项页面会重定向到 新编号,现有链接不会失效。但仍应按下文更新平台的设置,让新链接使用新编号。
- 如果你的实例设置了
STEALTH_PREFIX,它位于/issue/之前。 - 平台只负责生成链接,能否看到工作项由 Specivo 决定。没有权限的人会看到登录页或“未找到”,和其他 链接一样。
不要只用数字链接到 /issue/12/:单独的数字是 Specivo 的内部工作项 id,不是 ACME-12 里的编号,
会打开另一个工作项。
配置步骤¶
你需要仓库的管理员权限。打开仓库的 Settings,然后:
- Gitea:在主设置页的 Advanced Settings 区域,找到 Issues。
- Forgejo:在设置侧边栏点击 Units,再找到 Issues 区域。
如何启用外部工单系统取决于版本:
- Forgejo,以及 1.27 及更早的 Gitea:勾选 Enable Repository Issue Tracker(启用仓库工单系统), 然后选择 Use External Issue Tracker(使用外部工单系统),而不是 Use Built-In Issue Tracker (使用内置工单系统)。
- Gitea 28 及更新版本:两个选项是独立的复选框。勾选 Use External Issue Tracker,并取消勾选
Use Built-In Issue Tracker。只要内置工单系统仍然开启,Issues 标签页就继续显示平台自带的工单,
#12也继续链接到它们,因此下文的数字格式无法指向 Specivo;字母数字和正则表达式引用则不受影响。
然后填写:
| 设置项 | 值 |
|---|---|
| External Issue Tracker URL | Issues 标签页要打开的地址,即项目的工作项列表:https://specivo.example.com/projects/ACME/issues/。 |
| External Issue Tracker URL Format | 工作项地址,带一个占位符。平台提供 {user}(仓库所有者)、{repo}(仓库名)和 {index}(工作项引用)。Specivo 只需要 {index},见下文各格式。 |
| External Issue Tracker Number Format | Alphanumeric(字母数字)、Numeric(数字)或 Regular Expression(正则表达式),见下文。 |
保存设置。平台是在显示文本时才把引用转成链接,所以修改之前写的提交信息和评论同样会带上链接。
字母数字格式:ACME-12 这样的引用¶
如果团队习惯写完整的 Specivo 编号,就选这种格式; 仓库集成读取的也是这种写法。
| 设置项 | 值 |
|---|---|
| URL Format | https://specivo.example.com/issue/{index}/ |
| Number Format | Alphanumeric |
{index} 就是整个引用(ACME-12),因此一个仓库可以链接到多个项目的工作项。
平台只在满足以下条件时才识别字母数字引用:项目标识为 1 到 10 个大写字母,数字不以 0 开头,
引用全部大写(acme-12 不会被链接),并且独立成词:后面是空格、行尾、.、,、:、右括号或引号,
而不是 ;、! 等其他标点。Specivo 的项目标识还可以包含数字,长度也可以更长(WEB2、
INFRASTRUCTURE);带这类标识的引用在此格式下不会被链接,请改用 Regular Expression。
数字格式:固定项目标识,引用写成 #12¶
如果仓库只对应一个 Specivo 项目,而你更喜欢写 #12,就选这种格式。
| 设置项 | 值 |
|---|---|
| URL Format | https://specivo.example.com/issue/ACME-{index}/ |
| Number Format | Numeric |
{index} 只是数字,所以 URL Format 里必须带上项目标识和连字符。这样每个 #12 都会打开 ACME-12;
其他项目的工作项无法链接。
平台自己的合并请求也用 # 编号。启用数字格式的外部工单系统后,#12 一律表示 Specivo 工作项;
要引用平台的第 12 号合并请求,写 !12。两者容易混淆,所以能用字母数字格式时优先使用它。
正则表达式:其他任意标识¶
当项目标识包含数字或超过十个字母,或者只想匹配特定标识时,选这种格式。
| 设置项 | 值 |
|---|---|
| URL Format | https://specivo.example.com/issue/{index}/ |
| Number Format | Regular Expression |
| Regular Expression Pattern | \b(WEB2-[0-9]+)\b |
平台会用 第一个圆括号分组 捕获到的内容替换 {index},这里是 WEB2-12。要接受多个标识,把它们
列出来:\b((?:WEB2|INFRASTRUCTURE)-[0-9]+)\b。如果只想捕获数字,像数字格式那样把标识写进
URL Format:https://specivo.example.com/issue/WEB2-{index}/,配合模式 \bWEB2-([0-9]+)\b。