提交贡献代码
介绍从 github 发起 pull requests 和提交代码的流程。
Fork 仓库
访问 https://github.com/yunionio/cloudpods ,将仓库 fork 到自己的 github 用户下。
Clone 源码
clone 自己 fork 的仓库,并设置 upstream 为源仓库。
$ git clone https://github.com/<your_name>/cloudpods
$ cd cloudpods
$ git remote add upstream https://github.com/yunionio/cloudpods
提交代码流程
1. 从 master checkout 出 feature 或者 bugfix 分支
# checkout 新分支
$ git fetch upstream --tags
# 下面假设新的分支名为 'feature/implement-x'
# 分支名应该有语义性,描述这次开发要实现或者修复什么
$ git checkout -b feature/implement-x upstream/master
2. 在新的分支上进行开发
所有的代码修改,都在新的分支上进行。
如果不熟悉 git 相关的操作,可参考这个文档先学习 git 的基本操作:Git-Tutorials。
3. 开发完成后,进行提交PR前的准备操作
# 同步远程 upstream master 代码
$ git fetch upstream
# 有冲突则解决冲突
$ git rebase upstream/master
# push 分支到自己的 repo
$ git push origin feature/implement-x
4. 在GitHub的Web界面完成 提交PR的流程
- 提完 PR 后请求相关开发人员 review,并设置Labels来表明提交的代码属于哪一个模块或者哪几个模块。
- 或者通过添加评论的方式来完成上一步;评论 "/cc" 并 @ 相关人员完成设置reviewer,评论 /area 模块名称 标记此次改动所属的模块。
所有Label都可以在issues—Labels下查询到,带area/前缀的Label均可以使用评论"/area"的形式添加
5. cherry-pick 代码
如果是 bugfix 或者需要合并到之前 release 分支的 feature PR,需要额外使用脚本将此PR cherry-pick 到对应的 release 分支
# 自行下载安装 github 的 cli 工具:https://github.com/github/hub
# macOS 使用: brew install hub
# Debian: sudo apt install hub
# 二进制安装: https://github.com/github/hub/releases
# 设置github的用户名
# 可已把该环境变量放到 ~/.bashrc 里面,如果使用的 zsh 则放到 ~/.zshrc 里面
$ export GITHUB_USER=<your_username>
# 访问这个连接添加自己的访问 token:https://github.com/settings/tokens
# 设置github个人token
$ export GITHUB_TOKEN=<your_access_token>
# 使用脚本自动 cherry-pick PR 到 release 分支
# 比如现在有一个提交的PR的编号为17561,要把它合并到 release/3.10
$ ./scripts/cherry_pick_pull.sh upstream/release/3.10 17561
# cherry pick 可能会出现冲突,冲突时开另外一个 terminal,解决好冲突,再输入 'y' 进行提交
$ git add xxx # 解决完冲突后
$ git am --continue
# 回到执行 cherry-pick 脚本的 terminal 输入 'y' 即可
去 upstream 的 PR 页面, 就能看到自动生成的 cherry-pick PR,上面操作的PR的标题前缀就应该为:Automated cherry pick of #17561
,然后重复 PR review 流程合并到 release
提示
提交 git 代码后需要书写 commit 内容,规范请参考: Git 提交内容规范。
开发效率提升推荐配置
上述的提 PR 流程使用到了很多命令行操作,特别是在执行 ./scripts/cherry_pick_pull.sh
脚本的时候会输入很多字符。以及每次执行该脚本都需要输入 github 的 token。重复执行这些操作会让人觉得浪费时间。
下面提供一些配置和工具,可以提升一些命令行下的开发效率,请根据自己的实际需要选择配置。