跳到主要内容
跳到主要内容

先决条件

ClickHouse 可以在 Linux、FreeBSD 和 macOS 上构建。如果您使用 Windows,您仍然可以在运行 Linux 的虚拟机中构建 ClickHouse,例如使用 VirtualBox 和 Ubuntu。

在 GitHub 上创建一个仓库

要开始开发 ClickHouse,您需要一个 GitHub 帐户。请先在本地生成一个 SSH 密钥(如果您还没有的话),并将公钥上传到 GitHub,因为这是贡献补丁的先决条件。

接下来,通过单击右上角的“fork”按钮,在您的个人帐户中分叉 ClickHouse 仓库

要贡献更改,例如修复问题或添加功能,请先将更改提交到您的分叉的一个分支,然后创建一个“Pull Request”,将更改发送到主仓库。

对于与 Git 仓库的工作,请安装 Git。例如,在 Ubuntu 中,运行:

Git 速查表可以在 这里找到。详细的 Git 手册在 这里

将仓库克隆到您的开发机器

首先,将源文件下载到您的工作机器上,即克隆该仓库:

此命令创建一个包含源代码、测试和其他文件的目录 ClickHouse/。您可以在 URL 后指定一个自定义目录进行签出,但重要的是该路径不能包含空格,因为这可能会导致后续构建中断。

ClickHouse 的 Git 仓库使用子模块来拉取第三方库。子模块默认不被检出。您可以选择

  • 使用 --recurse-submodules 选项运行 git clone

  • 如果不使用 --recurse-submodules 运行 git clone,则运行 git submodule update --init --jobs <N> 显式检出所有子模块。 (<N> 可以设置为 12 以进行并行下载。)

  • 如果不使用 --recurse-submodules 并且您想使用 稀疏浅层 子模块检出以省略不需要的文件和历史以节省空间(约 5 GB 而不是约 15 GB),运行 ./contrib/update-submodules.sh。这种替代方案由 CI 使用,但不推荐用于本地开发,因为它会使与子模块的工作变得不方便且速度较慢。

要检查 Git 子模块的状态,请运行 git submodule status

如果您收到以下错误消息:

则缺少连接到 GitHub 的 SSH 密钥。这些密钥通常位于 ~/.ssh。为了让 SSH 密钥被接受,您需要在 GitHub 的设置中上传它们。

您还可以通过 HTTPS 克隆仓库:

然而,这将无法让您将更改发送到服务器。您仍然可以暂时使用它,稍后添加 SSH 密钥,并用 git remote 命令替换仓库的远程地址。

您还可以将原始 ClickHouse 仓库地址添加到您的本地仓库,以便从那里拉取更新:

成功运行此命令后,您将能够通过运行 git pull upstream master 从主 ClickHouse 仓库拉取更新。

提示

请不要直接使用 git push,您可能会推送到错误的远程和/或错误的分支。最好明确指定远程和分支名称,例如 git push origin my_branch_name

编写代码

在这里,您可以找到一些编写 ClickHouse 代码时可能有用的快速链接:

IDE

CLion(推荐)

如果您不知道使用哪个 IDE,建议您使用 CLion。CLion 是商业软件,但提供 30 天的免费试用。对于学生,它也免费。CLion 可在 Linux 和 macOS 上使用。

使用 CLion 开发 ClickHouse 时,有几个事情需要知道:

  • CLion 会自行创建一个 build 路径,并自动选择 debug 作为构建类型
  • 它使用的 CMake 版本是在 CLion 中定义的,而不是您安装的版本
  • CLion 将使用 make 来运行构建任务,而不是 ninja(这很正常)

替代方案

KDevelopQTCreator 是其他很好的 ClickHouse 开发 IDE。虽然 KDevelop 是一个很好的 IDE,但有时不太稳定。如果 KDevelop 在打开项目时崩溃,您应该在打开项目文件列表后尽快单击“停止所有”按钮。这样,KDevelop 应该可以正常工作。

您可以使用的其他 IDE 还包括 Sublime TextVisual Studio CodeKate(这些都可以在 Linux 上使用)。如果您使用 VS Code,建议使用 clangd 扩展 来替换 IntelliSense,因为它的性能更好。

创建 Pull Request

在 GitHub 的 UI 中导航到您的分叉仓库。如果您在某个分支中进行开发,您需要选择该分支。屏幕上会有一个“Pull request”按钮。实质上,这意味着“创建一个请求以接受我的更改到主仓库中”。

即使工作尚未完成,也可以创建 Pull Request。在这种情况下,请在标题的开头加上“WIP”(进行中的工作),之后可以进行更改。这对于合作审查和讨论更改以及运行所有可用的测试非常有用。重要的是您要提供简要的更改描述,这将在后续生成发布变更日志时使用。

测试将在 ClickHouse 员工将您的 PR 标记为“可测试”后开始。某些初始检查(例如代码风格)的结果将在几分钟内返回。构建检查结果将在半小时内返回。主要的测试结果将在一小时内报告。

系统将为您的 Pull Request 单独准备 ClickHouse 二进制构建。要获取这些构建,请单击检查列表中“构建”条目旁边的“详细信息”链接。在那里,您将找到构建的 ClickHouse .deb 包的直接链接,您甚至可以在生产服务器上部署它们(如果您不害怕)。

编写文档

每个添加新功能的 Pull Request 必须附带适当的文档。如果您希望预览文档更改,关于如何在本地构建文档页面的说明可以在 README.md 文件 这里 找到。添加新函数时,您可以使用下面的模板作为指南:

使用测试数据

开发 ClickHouse 通常需要加载现实的数据集。这对于性能测试尤为重要。我们有一套专门准备的匿名网页分析数据集。这需要额外的 3GB 可用磁盘空间。

clickhouse-client 中:

导入数据: