Help us learn about your current experience with the documentation. Take the survey.
Wikis 开发指南
GitLab 中的 wiki 功能基于 Gollum 4.x。 它在 Gitaly Ruby 服务中使用,并通过 Gitaly RPC 调用从 Rails 应用程序访问。
Wikis 使用 Git 仓库作为存储后端,可以通过以下方式访问:
相关的 Gems
用于 wikis 的一些 notable gems 如下:
| 组件 | 描述 | Gem 名称 | GitLab 项目 | 上游项目 |
|---|---|---|---|---|
gitlab |
标记渲染器,依赖于其他多个 gems | gitlab-markup |
gitlab-org/gitlab-markup |
github/markup |
关于 Gollum 的说明
我们仅将 Gollum 用作存储抽象层,用于处理 wiki 页面 slug 与仓库中文件之间的映射关系。
在渲染 wiki 页面时,我们完全不使用 Gollum,而是通过一个
自定义的 Banzai 管道。
这添加了一些 wiki 特定的标记,例如 Gollum 的 [[link]] 语法。
由于我们没有使用 Gollum 的大多数功能,我们计划在未来完全弃用它。 请参考这个 epic。
模型类
Wiki 类是围绕 wiki 仓库的主要抽象,它需要初始化一个容器,
该容器可以是 Project 或 Group:
classDiagram
Wiki --> ProjectWiki
Wiki --> GroupWiki
class Wiki {
#container
#repository
}
class ProjectWiki {
#project → #container
}
class GroupWiki {
#group → #container
}
一些模型包装了来自 Gitaly 和 Gollum 的类似类:
| Rails 模型 | Gitaly 类 | Gollum |
|---|---|---|
Wiki |
Gitlab::Git::Wiki |
Gollum::Wiki |
WikiPage |
Gitlab::Git::WikiPage, Gitlab::Git::WikiPageVersion |
Gollum::Page |
Gitlab::Git::WikiFile |
Gollum::File |
只有部分数据会持久化到数据库中:
| 模型 | 描述 |
|---|---|
WikiPage::Meta |
wiki 页面的元数据 |
WikiPage::Slug |
wiki 页面的当前和之前的 slug |
ProjectRepository |
项目 wiki 的 Gitaly 存储数据 |
GroupWikiRepository |
组 wiki 的 Gitaly 存储数据 |
附件
Web UI 通过 REST API 上传附件,这些文件作为提交存储在 wiki 仓库中。