先决条件
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
(这很正常)
替代方案
KDevelop 和 QTCreator 是其他很好的 ClickHouse 开发 IDE。虽然 KDevelop 是一个很好的 IDE,但有时不太稳定。如果 KDevelop 在打开项目时崩溃,您应该在打开项目文件列表后尽快单击“停止所有”按钮。这样,KDevelop 应该可以正常工作。
您可以使用的其他 IDE 还包括 Sublime Text、Visual Studio Code 或 Kate(这些都可以在 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
中:
导入数据: