如何贡献代码

我们真诚地感谢您的贡献,欢迎通过 GitHub 的 fork 和 pull request 流程来提交代码。

代码要求

  • 代码注释请遵守Doxygen的样式
  • 所有代码必须具有单元测试
  • 通过所有单元测试
  • 请遵守提交代码的一些约定

以下教程将指导您提交代码

Fork

首先跳转到Anakin的github首页,然后点击Fork, 生成自己目录下的仓库

克隆(clone)

将远程仓库clone到本地:

git clone YOUR_REPOSITORY_URL
cd Anakin

创建本地分支

Anakin目前使用Git流分支模型进行开发, 测试和维护。
所有的feature和bug fix的开发工作都应该在一个新的分支上完成,根据需要从现有分支上创建新分支。
使用git checkout -b创建并切换到新分支

git checkout -b YOUR_NEW_BRANCH

开始开发

编写代码

构建和测试

详细请参考Docker installation guidebuild from source guide

提交(commit)

提交代码时,请认真写好提交说明,这样其他人就可以清楚的知道这次提交做了哪些改变:

git commit -m 'description'

保持本地仓库最新

在发起Pull Request之前,需要与原始仓库同步。

如果还没添加原仓库,请先添加源,可通过git remote -v查看是否添加源:

git remote -v
origin .... (fetch)
origin .... (push)

如果只出现origin,说明还未添加源,可通过如下命令添加源:

git remote add upstream ORIGIN_REPOSITORY_URL

获取 upstream 的最新代码并更新当前分支

git fetch upstream
git pull upstream BRANCH_NAME

Push到远程仓库

将本地的修改push到远程仓库上

git push origin BRANCH_NAME

提交Pull Request

切换到所建分支,然后点击New pull request

选择目标分支:

接下来等待review。

删除远程分支

在PR被merge进主仓库后,可以在PR的界面删除远程仓库的分支。
也可以通过以下命令删除远程分支:

git push origin :YOUR_NEW_BRANCH

删除本地分支

最后,删除本地分支。

#切换到其他分支
git checkout OTHER_BRANCH

#删除YOUR_NEW_BRANCH分支
git branch -D YOUR_NEW_BRANCH

至此,我们就完成了一次代码贡献的过程。

提交代码的一些约定

为了使评审人在评审代码时更好地专注于代码本身,请您每次提交代码时,遵守以下约定:

  1. 提交Pull Request前:
  • 注意commit的数量

    • 原因:如果仅仅修改一个文件但提交了十几个commit,每个commit只做了少量的修改,这会给评审人带来很大困扰。评审人需要逐一查看每个commit才能知道做了哪些修改,且不排除commit之间的修改存在相互覆盖的情况。

    • 建议:每次提交时,保持尽量少的commit,可以通过git commit --amend补充上次的commit。对已经Push到远程仓库的多个commit,可以参考squash commits after push

  • 注意每个commit的名称:应能反映当前commit的内容,不能太随意。

  1. 如果解决了某个Issue的问题,请在该Pull Request的第一个评论框中加上:fix #issue_number,这样当该Pull Request被合并后,会自动关闭对应的Issue。关键词包括:close, closes, closed, fix, fixes, fixed, resolve, resolves, resolved,请选择合适的词汇。详细可参考Closing issues via commit messages

在回复评审人意见时,请您遵守以下约定:

  1. 评审人的每个意见都必须回复
    • 对评审意见同意且按其修改完的,给个简单的Done即可
    • 对评审意见不同意的,请给出您自己的反驳理由。
  2. 如果评审意见比较多
    • 请给出总体的修改情况。
    • 请采用start a review进行回复,而非直接回复的方式。