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 仓库的主要抽象,它需要初始化一个容器, 该容器可以是 ProjectGroup

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 仓库中。

相关主题