贡献代码

简介

Neo4j 社区是一个自由软件和开源社区,其核心是 Neo4j 图形数据库的软件和组件。它由 Neo Technology 赞助,后者提供基础设施(各种托管、文档等)以及管理人员。Neo4j 社区是一个开放社区,欢迎任何接受基本贡献标准的成员。

贡献可以有多种形式(文档、讨论、错误报告)。本文档概述了代码贡献者的治理规则。

治理基础

简而言之,如果您希望贡献代码,需要了解以下基础知识:

  • Neo4j 项目发布的所有软件都必须在 Neo4j 代码 贡献者许可协议 下贡献。

  • Neo4j 是一个自由软件和开源社区。作为贡献者,您可以自由地将您的作品置于任何经 自由软件基金会开源倡议组织 批准的许可之下。您仍然保留版权,因此除了该许可之外,您当然可以根据任何其他许可(例如完全专有许可)发布您的作品,但不能在 Neo4j 基础设施上。

  • Neo4j 软件分为多个组件。一个 Git 仓库包含一个或多个组件。

  • 源代码应遵循 Neo4j 代码风格,并尽可能合理地“融入”Neo4j 基础设施,以适应特定组件。

贡献者角色

每个贡献代码的个人都在特定角色下进行(一个人可以拥有多个角色)。该角色定义了他们的职责和权限:

  • 补丁提交者 是希望为现有组件贡献补丁的人。请参阅下方的 贡献工作流

  • 提交者 可以直接向一个或多个组件贡献代码。

  • 组件维护者 负责特定组件。他们可以:

    • 在他们组件的仓库中提交代码,

    • 管理仓库的工单,

    • 授予仓库推送权限。

  • Neo4j 管理员 管理 Neo4j 基础设施。他们:

    • 定义新组件并分配组件维护权,

    • 推动、指导和培养 Neo4j 组件开发。

贡献工作流

对 Neo4j 的代码贡献通常通过 GitHub 拉取请求(Pull Request)进行,遵循以下所示的工作流。在发送拉取请求之前,请务必查看 拉取请求清单

  1. Fork 相应的 GitHub 仓库。

  2. 为您的特定功能或修复创建一个新分支。

  3. 为您的代码编写单元测试,即使是小的贡献也要写.

  4. 编写代码.

  5. 编写适当的 Javadoc 和 Neo4j 手册中的条目。

  6. 提交更改.

  7. 发送拉取请求.

单元测试

如果您提供涵盖您所编写代码的、小而易读的单元测试,您的更改被接受的机会会大大增加。此外,请确保您的代码不会破坏任何现有测试。请注意,根据您的更改,可能还需要测试下游组件。

要运行测试,请使用 Maven 而不是您的 IDE,以确保其他人可以复现您的测试运行。在任何给定组件中运行 Neo4j 测试的命令是 mvn clean test

单元测试的通用结构如下:

@Test
public void myTest()
{
    // Given
    [ Setup code here, setting the stage and
      parameters that are relevant ]

    // When
    [ The code that is being tested, preferably
      just one line, like calling a method ]

    // Then
    [ Assertions on the result ]
}

代码风格

Neo4j 代码风格维护在 http://neo4j.github.io/

提交消息

请注意提供良好的提交消息;关于良好实践的优秀总结可以在 http://chris.beams.io/posts/git-commit/ 找到。另请考虑以下准则:

  • 使用英文。这包括正确的标点符号和拼写。提交消息旨在一目了然地传达信息——它们不是聊天室。

  • 请记住,一次提交是一个变更集,它描述了跨多个文件的内聚更改集合。尝试将每次提交分组为一个逻辑更改。解释它更改了什么。如果您需要重做工作,您可能需要在进行拉取请求之前清理您的提交日志。

  • 如果您修复了一个与工单相关的错误或问题,请在消息中提及该工单。例如,"添加了这个然后更改了那个。这修复了 #14。" 只需在提交中提及 #xxx 即可将其与具有该编号的 GitHub 问题连接起来,请参阅 GitHub 问题。以下任何同义词也都有效:

    • fixes #xxx

    • fixed #xxx

    • fix #xxx

    • closes #xxx

    • close #xxx

    • closed #xxx。

  • 请记住传达意图。不要过于简短,但也不要提供太多细节。那是 git diff 的作用。

签署 CLA

贡献的一个关键方面是 贡献者许可协议。简而言之:请务必签署 CLA,否则 Neo4j 项目将无法接受您的贡献。

不要合并,请使用 rebase!

因为我们希望每个贡献都包含在一个单独的提交中,所以在拉取请求中不允许合并提交。合并会使历史混乱,只应在必要时进行,例如将分支合并到 master 以记录代码来源。

如果您想更新您的开发分支以合并来自 master 的最新更改,请使用 git rebase。有关如何使用 rebase 的详细信息,请参阅 Git rebase 手册:Git 手册