为 TensorFlow 代码贡献力量

无论您是添加损失函数、改进测试覆盖率,还是为重大设计变更编写 RFC,本部分贡献者指南将帮助您入门。感谢您为改进 TensorFlow 所做的工作和贡献。

开始之前

在您为 TensorFlow 项目贡献源代码之前,请查看项目 GitHub 存储库中的 CONTRIBUTING.md 文件。例如,请查看核心 TensorFlow 存储库中的 CONTRIBUTING.md 文件。所有代码贡献者都需要签署 贡献者许可协议 (CLA)。

为了避免重复工作,请在开始处理非平凡功能之前,查看 当前提议 的 RFC,并与 TensorFlow 论坛上的开发者联系 ([email protected])。我们对添加新功能的选择性比较高,而帮助项目的最佳方式是解决已知问题。

面向新贡献者的问题

新贡献者在搜索首次贡献到 TensorFlow 代码库时,应该寻找以下标签。我们强烈建议新贡献者首先处理“良好入门问题”和“欢迎贡献”项目;这有助于贡献者熟悉贡献工作流程,并让核心开发人员了解贡献者。

如果您有兴趣招募团队来帮助解决大型问题或新功能,请发送电子邮件到 developers@ 组 并查看我们当前的 RFC 列表。

代码审查

新功能、错误修复以及对代码库的任何其他更改都需进行代码审查。

审查作为拉取请求贡献到项目的代码是 TensorFlow 开发的关键组成部分。我们鼓励任何人都可以开始审查其他开发者提交的代码,尤其是当该功能是您可能使用的功能时。

以下是一些在代码审查过程中需要注意的问题

  • 我们是否希望将此功能添加到 TensorFlow 中? 该功能是否可能被使用?作为 TensorFlow 用户,您是否喜欢此更改并打算使用它?此更改是否在 TensorFlow 的范围内?维护新功能的成本是否值得其带来的益处?
  • 代码是否与 TensorFlow API 一致? 公共函数、类和参数的命名是否合理且设计直观?
  • 代码是否包含文档? 所有公共函数、类、参数、返回类型和存储属性的命名是否符合 TensorFlow 约定,并有清晰的文档说明?新功能是否在 TensorFlow 的文档中进行了描述,并在可能的情况下通过示例进行了说明?文档是否可以正常渲染?

  • 代码是否易于阅读? 代码是否冗余度低?变量名称是否需要改进以提高清晰度或一致性?是否需要添加注释?是否需要删除任何无用或多余的注释?

  • 代码是否高效? 代码是否可以轻松地重写以提高效率?

  • 代码是否与 TensorFlow 的先前版本向后兼容

  • 新代码是否会添加对其他库的新依赖项

测试和改进测试覆盖率

高质量的单元测试是 TensorFlow 开发流程的基石。为此,我们使用 Docker 镜像。测试函数的命名应适当,并负责检查算法的有效性以及代码的不同选项。

所有新功能和错误修复必须包含足够的测试覆盖率。我们也欢迎贡献新的测试用例或改进现有测试。如果您发现我们现有的测试不完整(即使这目前不会导致错误),请提交问题,如果可能,请提交拉取请求。

有关每个 TensorFlow 项目中测试程序的具体细节,请参阅 GitHub 上项目存储库中的 README.mdCONTRIBUTING.md 文件。

充分测试中,特别需要注意以下问题

  • 每个公共函数和类是否都经过测试?
  • 是否测试了合理的参数集、其值、值类型和组合?
  • 测试是否验证了代码的正确性,以及代码是否按照文档说明执行了预期功能?
  • 如果更改是错误修复,是否包含非回归测试
  • 测试是否通过了持续集成构建?
  • 测试是否覆盖了每一行代码? 如果没有,异常是否合理且明确?

如果您发现任何问题,请考虑帮助贡献者了解这些问题并解决它们。

改进错误消息或日志

我们欢迎改进错误消息和日志的贡献。

贡献工作流程

代码贡献,包括修复 bug、新功能开发和测试改进,都遵循以 GitHub 为中心的流程。要参与 TensorFlow 开发,请先创建一个 GitHub 账号。然后:

  1. Fork 你想要参与的仓库。前往项目仓库页面,点击“Fork”按钮。这将在你的用户名下创建一个仓库副本。(有关如何 fork 仓库的更多信息,请参阅 此指南。)

  2. 将仓库克隆到你的本地系统。

    $ git clone [email protected]:your-user-name/project-name.git

  3. 创建一个新分支来存放你的工作。

    $ git checkout -b new-branch-name

  4. 编写新的代码并运行测试。

  5. 提交你的更改。

    $ git add -A

    $ git commit -m "commit message here"

  6. 将你的更改推送到你的 GitHub 仓库。

    $ git push origin branch-name

  7. 打开一个“Pull Request”(PR)。前往 GitHub 上的原始项目仓库。你将看到一条关于你最近推送的分支的消息,询问你是否要打开一个 Pull Request。按照提示操作,选择“跨仓库比较”,并提交 PR。这将向提交者发送一封电子邮件。你可能需要考虑向邮件列表发送一封电子邮件,以提高可见度。(有关更多信息,请参阅 GitHub 关于 PR 的指南。)

  8. 维护者和其他贡献者将“审查你的 PR”。请参与讨论,并尝试“进行所有请求的更改”。PR 被批准后,代码将被合并。

在开始你的下一个贡献之前,请确保你的本地仓库是最新的。

  1. 设置上游远程仓库。(你只需要对每个项目执行一次,而不是每次都执行。)

    $ git remote add upstream [email protected]:tensorflow/project-repo-name

  2. 切换到本地 master 分支。

    $ git checkout master

  3. 从上游拉取更改。

    $ git pull upstream master

  4. 将更改推送到你的 GitHub 账号。(可选,但建议这样做。)

    $ git push origin master

  5. 如果你要开始新的工作,请创建一个新分支。

    $ git checkout -b branch-name

其他 git 和 GitHub 资源

贡献者清单