此页面由 Cloud Translation API 翻译。
Switch to English

贡献TensorFlow代码

无论您是添加损失功能,改善测试范围还是为重大设计更改编写RFC,贡献者指南的这一部分都将帮助您入门。感谢您对改进TensorFlow的工作和关注。

开始之前

在向TensorFlow项目贡献源代码之前,请查看该项目的GitHub存储库中的CONTRIBUTING.md文件。 (例如,请参阅核心TensorFlow回购CONTRIBUTING.md文件 。)要求所有代码提供者签署“提供者许可协议” (CLA)。

为避免重复工作,请在开始使用非常规功能之前,查看当前的RFC并与TensorFlow论坛上的开发人员联系。在决定添加新功能时,我们有些选择,做出贡献和帮助项目的最佳方法是处理已知问题。

新贡献者的问题

新的贡献者在搜索对TensorFlow代码库的首次贡献时应寻找以下标签。我们强烈建议新的参与者先处理“简单”和“良好的第一期”项目;这有助于贡献者熟悉贡献工作流程,并使核心开发人员熟悉贡献者。

  • good first issue
  • easy
  • contributions welcome

如果您有兴趣招聘一个团队来解决大规模问题或新功能,请给developer @@组发送电子邮件,并查看我们当前的RFC列表。

代码审查

新功能,错误修复以及对代码库的任何其他更改都必须经过代码审查。

审查请求请求中对项目有贡献的代码是TensorFlow开发的关键组成部分。我们鼓励任何人开始审查其他开发人员提交的代码,尤其是在您可能会使用该功能的情况下。

在代码审查过程中,请牢记以下一些问题:

  • 我们在TensorFlow中想要这个吗?有可能被使用吗?作为TensorFlow用户,您是否喜欢更改并打算使用它? TensorFlow范围的变化了吗?维护新功能的成本是否物有所值?
  • 代码是否与TensorFlow API一致?公共函数,类和参数的名称是否命名合理且设计直观?
  • 是否包括文件?是否已根据TensorFlow约定命名所有公共函数,类,参数,返回类型和存储的属性,并进行了明确记录? TensorFlow文档中是否描述了新功能,并在示例中说明了新功能?文档是否正确呈现?

  • 代码是人类可读的吗?冗余度低吗?是否应该改进变量名称以使其清晰或一致?应该添加评论吗?是否应该删除任何无用或多余的评论?

  • 代码高效吗?可以容易地重写它以更有效地运行吗?

  • 代码向后兼容 TensorFlow的先前版本吗?

  • 新代码会在其他库上添加新的依赖项吗?

测试并提高测试覆盖率

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

所有新功能和错误修复必须包括足够的测试范围。我们也欢迎新的测试用例或对现有测试的改进的贡献。如果您发现我们现有的测试尚未完成(即使当前尚未导致错误),请提出问题,并在可能的情况下提出拉拔请求。

有关每个TensorFlow项目中测试过程的特定详细信息,请参阅GitHub上项目回购中的README.mdCONTRIBUTING.md文件。

充分测试中特别需要关注的问题:

  • 是否对每个公共职能和课程都进行了测试?
  • 是否测试了一组合理的参数 ,它们的值,值类型和组合?
  • 测试是否验证代码正确无误 ,并且是否按照文档中规定的代码意图进行操作?
  • 如果更改是错误修复,是否包括非回归测试
  • 测试是否通过了持续集成构建?
  • 测试覆盖代码的每一行吗?如果不是,例外是否合理且明确?

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

改善错误消息或日志

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

贡献工作流程

代码贡献(错误修复,新开发,测试改进)均遵循以GitHub为中心的工作流程。要参与TensorFlow开发,请设置一个GitHub帐户。然后:

  1. 分叉您打算处理的仓库。转到项目回购页面,然后使用Fork按钮。这将在您的用户名下创建回购的副本。 (有关如何派生存储库的更多详细信息,请参阅本指南 。)

  2. 将存储库克隆到本地系统。

    $ git clone git@github.com: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. 打开拉取请求 (PR)。转到GitHub上的原始项目仓库。将会出现一条有关您最近推送的分支的消息,询问您是否要打开提取请求。按照提示进行操作, 在存储库之间进行比较 ,然后提交PR。这将向提交者发送电子邮件。您可能需要考虑将电子邮件发送到邮件列表以获取更多可见性。 (有关更多详细信息,请参阅关于PRGitHub指南

  8. 维护者和其他贡献者将审查您的PR 。请参与对话,并尝试进行任何要求的更改 。一旦批准公关,代码将被合并。

在进行下一个贡献之前,请确保您的本地存储库是最新的。

  1. 设置上游遥控器。 (每个项目只需执行一次,而不必每次。)

    $ git remote add upstream git@github.com:tensorflow/project-repo-name

  2. 切换到本地主分支。

    $ git checkout master

  3. 从上游下拉更改。

    $ git pull upstream master

  4. 将更改推送到您的GitHub帐户。 (可选,但这是一个好习惯。)

    $ git push origin master

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

    $ git checkout -b branch-name

额外的git和GitHub资源:

贡献者清单

  • 阅读贡献准则。
  • 阅读行为准则。
  • 确保您已经签署了贡献者许可协议(CLA)。
  • 检查您的更改是否与准则一致。
  • 检查您的更改是否与TensorFlow编码风格一致。
  • 运行单元测试。