贡献概述#
本地 Git 约定#
如果您在本地跟踪 Arrow 源代码存储库,以下是如何使用 git
的清单
基于您
apache/arrow
的**个人分支**进行工作,并提交“上游”的拉取请求。使您的分支的**主分支与
upstream/main
同步**。**在分支上进行开发**,而不是您自己的“主”分支。
您为分支命名的方式无关紧要。有些人喜欢使用 GitHub 问题编号作为分支名称,其他人则使用描述性名称。
**定期将您的分支与
upstream/main
同步**,因为每天都会将许多提交合并到主分支中。建议使用
git rebase
而不是git merge
。如果存在冲突,并且您的本地提交历史记录有多个提交,您可以通过**将本地提交压缩成单个提交**来简化冲突解决过程。保留提交历史记录并不那么重要,因为当您的功能分支合并到上游时,会自动进行压缩。
拉取请求和审查#
在贡献补丁时,请使用此列表作为 Apache Arrow 工作流的清单
将补丁作为**针对主分支的 GitHub 拉取请求**提交。
为了使您的拉取请求与 GitHub 问题同步,请**以 GitHub 问题 ID 为拉取请求标题的前缀**(例如:GH-14866: [C++] 删除内部 GroupBy 实现)。
为拉取请求提供**清晰简洁的描述**:合并拉取请求后,此描述将保留在扩展的提交消息中。
确保您的代码**通过单元测试**。您可以在每个 Arrow 组件的相应 README 文件中找到有关如何运行单元测试的说明。
核心开发人员和其他对您更改影响的项目部分有权益的人员将审查、请求更改,并最终希望表示他们的批准。为了让每个人的审查过程都顺利进行,请尝试
如果可能,将您的工作分解成小的、单一目的的补丁。
合并包含大量不相关功能的大型更改要困难得多,特别是如果您是项目的初学者,维护人员更容易接受较小的更改。
为您的代码添加新的单元测试。
**遵循**您正在修改的项目部分的**样式指南**。
某些语言(例如 C++ 和 Python)在持续集成中运行 lint 检查。对于所有语言,请参阅其各自的开发文档和 README 以获取样式指南。
尽量使代码库看起来只有一个作者,并模仿您看到的任何约定,无论它们是否已正式记录或检查。
当测试通过并且拉取请求得到相关方的批准后,提交者 将合并拉取请求。这是使用**执行压缩合并的命令行实用程序**完成的。
实验性存储库#
Apache Arrow 有一项关于在 革命者规则 的上下文中开发实验性存储库的明确策略。
此策略的主要动机是在 ASF 和 Apache Arrow 治理模型中提供一种轻量级机制来进行实验性工作,并提供必要的创造自由。此策略允许提交者在新的存储库上工作,因为它们提供了许多重要的工具来管理它(例如,github 问题、“关注”、“github 星星”以衡量整体兴趣)。
流程#
提交者可以通过在 Apache Arrow 中创建单独的 git 存储库(例如,通过 selfserve)并在邮件列表中宣布它,以及它的目标和指向新创建的存储库的链接来启动实验性工作。
提交者必须启动一个电子邮件线程,其唯一目的是向社区提供有关存储库状态的更新。
存储库不得有官方版本。
任何以任何方式(无论是合并还是迁移)使实验性存储库正式化的决定必须在邮件列表中进行讨论和投票。
提交者负责管理存储库的问题、文档和 CI,包括许可证检查。
提交者决定何时存档存储库。
存储库管理#
存储库必须位于
apache/
下存储库的名称必须以
arrow-experimental-
为前缀提交者对存储库拥有完全权限(在 ASF 中可能的情况下)
推送/合并权限只能授予 Apache Arrow 提交者
开发流程#
存储库必须遵循 ASF 关于第三方代码的要求。
提交者决定如何管理问题、PR 等。
差异#
如果上述任何“必须”未能实现,并且提交者未根据请求采取纠正措施,则 PMC应该承担所有权并决定采取什么措施。
特定功能的指南#
社区有时会讨论他们期望支持的特定类型的功能和改进。本节概述了在这方面做出的决定。
字节序#
Arrow 格式允许设置字节序。由于小端架构的流行,大多数实现默认情况下都假设为小端。也有一些努力来支持大端平台。根据邮件列表讨论,新平台的要求是
稳健的(非易变的,在合理的时间内返回结果)持续集成设置。
代码性能关键部分的基准测试,以证明没有回归。
此外,对于大端支持,实现可以支持两个级别
本机字节序(所有 Arrow 通信都发生在具有相同字节序的进程之间)。这包括辅助功能,例如读取和写入各种文件格式,例如 Parquet。
支持哪个级别的决定是基于维护者对复杂性和技术风险的偏好。一般来说,所有实现都应开放本机字节序支持(只要满足 CI 和性能要求)。跨端支持是各个维护者的问题。
当前旨在实现跨端支持的实现是
C++
不打算实现跨端支持的实现
Java
对于其他库,在提交 PR 之前应在邮件列表中进行讨论以达成共识。