《OceanBase开发者手册》之三 如何成为OceanBase Contributor

Abstract

本文将指导用户如何成为OceanBase Contributor, 即使是一个小白, 也可以成为contributor.

《OceanBase开发者手册》 主要指导开发者如何参与到OceanBase 的研发, 铺平参与OceanBase 开发的准备工作遇到的问题, 当前章节大概这几篇文章, 未来可能会增加部分文章, 目前OceanBase 源码参考OceanBase 开源官网的《开源数据库OceanBase源码解读》 系列 :

  1. 如何编译OceanBase源码
  2. 如何设置IDE开发环境
  3. 如何成为OceanBase Contributor
  4. 如何修改OceanBase文档
  5. 如何debug OceanBase
  6. 如何运行测试
  7. 如何修bug

步骤

准备工作

  1. https://github.com 上注册一个用户, 如果已经有了一个账户, 则跳过此步骤
    1. 因为现在github 不允许通过用户名和密码提交代码, 需要用户自己 创建token 来提交代码, https://docs.github.com/cn/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token , 用新的token 来代替过去的密码来提交.
  2. fork https://github.com/oceanbase/oceanbase 到自己github账户下

如果已经fork 了代码, 在github 点击

  1. 准备编译环境, 参考文档 how-to-build

代码编写

  1. 下载代码到本地,

    1
    # git clone https://github.com/${用户}/oceanbase

    备注: ${用户} 为用户的名字

  2. https://github.com/oceanbase/oceanbase/issues 上找一个简单的issue,

推荐找一个拼写错误的issue, 修改这些issue 比较简单, 容易上手.
https://github.com/oceanbase/oceanbase/issues?q=is%3Aissue+is%3Aopen+label%3Atypos

创建对应的分支

1
# git checkout -b issue${issue_number}

备注: ${issue_number} 为issue 的编号

  1. 在IDE 中修改代码, 推荐使用vscode, 并且vscode 使用远程链接功能.

  2. 修改完代码后, 进行编译

    1
    2
    #bash build.sh debug --init --make

    大概等待10分钟

  3. 开始单元测试, 如果只是修改注释, 修改文档, 则不需要进行单元测试

    1
    2
    3
    # cd build_debug/unittest/
    #make -j 4
    #./run_tests.sh

    整个过程, 需要1个小时

代码提交

1
2
3
4
5
6
7
8
9
10
# git status

# 位于分支 master
# 尚未暂存以备提交的变更:
# (使用 "git add <file>..." 更新要提交的内容)
# (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
# 修改: ../../src/${修改文件}
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

备注: ${修改文件}为修改文件
然后

1
2
3
git add ${修改文件}
git commit -m "fixed ${issue_number}, xxxxxxx"
git push origin issue${issue_number}

备注: ${issue_number}为issue的编号
commit的comments 需要带上”fixed ${issue_number}”, 这样可以将issue number 和pull request 关联起来
然后

创建pull request

即可,

创建pull request 后, 需要 签署CLA, 如果已经签署了, 类似这样

后续等待 OceanBase 的官方进行approve

其他注意事项

注意切换分支

当同时修改几个bug时, 每提交一个pull request 后, 就switch 到master上, 避免每个pull request 相互之间影响。

1
git checkout master

发生冲突

自己的fork 的master 分支有可能会与远程master分支出现冲突, 这个时候, 在自己的fork 分支上, 把冲突commit 给删掉, 然后merge remote 的分支

  1. 删除提交记录
1
git reset --soft HEAD~i

i代表要恢复到多少次提交前的状态,如指定i = 2,则恢复到最近两次提交前的版本。–soft代表只删除服务器记录,不删除本地。

  1. 执行
    1
    git push origin master --force
    master代表当前分支