创建补丁

来自 Alpine Linux

新的 aports 通常应放入 testing 仓库。经过合理的测试期后,如果软件包完整(例如,它有 init 脚本,它有可工作且合理的默认配置等)并且它有维护者,则可以将其移至 community 仓库。Main 仓库用于 Linux 系统的核心软件包或作为其他核心软件包的依赖项的软件包。Main 仓库中的软件包不能依赖于 community 或 testing 仓库中的软件包,而 community 仓库中的软件包不能依赖于 testing 仓库中的软件包。

目前有两种方式可以提交更改建议:通过 Gitlab 和通过邮件列表。

通过 Gitlab 提交补丁

设置

要在 Alpine Linux 的 Gitlab 实例 上提交补丁,您首先必须在此处创建一个帐户。建议现在设置一个 SSH 密钥,有关如何操作,请参阅 Gitlab 文档

创建合并请求

现在您已完成设置,您必须 fork 您要贡献的仓库。例如,如果您要为 aports 打开合并请求,则必须 fork alpine/aports,如果您在操作时遇到问题,请参阅 Gitlab 文档。属于 Alpine Linux 的其他仓库位于 Alpine 组织 中。如果您已经有一个旧的 fork,请先克隆它,然后如下所示更新它。

fork 后,您可以像这样克隆仓库

git clone git@gitlab.alpinelinux.org:$USER/$REPO.git

将 $USER 替换为您的 Gitlab 帐户昵称,将 $REPO 替换为您要处理的仓库。现在您可以切换到另一个分支(例如,您要编辑的软件包的名称),使用

(如有必要,首先更新旧的 fork,请参阅下面的 变基

git checkout -b pkgname

现在进行更改,然后使用以下命令推送

git push -u origin $branchname

Gitlab 将在您的终端中打印一个 URL 以创建合并请求。

修改合并请求的更改

如果审阅者要求更改,或者您注意到您的合并请求的更改应进行某些更改,则可以简单地将您的更改修改到正确的提交并强制推送。因此,如果您想更改分支尖端的提交,可以简单地执行

git commit --amend

如果您想更改不在分支尖端的提交,您可以执行

git commit --fixup $SHA1_OF_COMMIT_YOU_WANT_TO_FIX

之后,您必须强制推送才能更新您的合并请求

git push -f origin

基于 Alpine Linux 的 master 分支进行变基

最好始终与上游 Alpine Linux 仓库的状态保持同步,以确保以后不会发生合并冲突。为此,您首先必须添加一个新的 git 远程仓库,该远程仓库指向上游仓库(而不是您的 fork)

git remote add upstream https://gitlab.alpinelinux.org/alpine/$REPO

现在您可以使用以下命令获取所有更改

git fetch --all

然后您可以使用以下命令进行变基

git rebase

通过邮件列表提交补丁

警告:截至 2023 年 8 月 15 日,通过邮件列表提交补丁目前已损坏


补丁应使用 git 创建,并通过 git send-email(需要 git-email Alpine 软件包)提交到 alpine-aports 邮件列表。

仅使用 'git send-email' 提交最后一个提交

要将最后一个提交作为补丁提交到 alpine-aports 邮件列表

git send-email --to alpine-aports@lists.alpinelinux.org -1

提示:您可以使用以下命令将 To 地址(不需要 '--to alpine-aports@lists.alpinelinux.org')保存在 git 配置中

git config sendemail.to alpine-aports@lists.alpinelinux.org

提交消息中的第一行将是主题,长描述(用空行分隔)将是电子邮件的正文。下面的示例显示

testing/packagename: new aport <- header

https://example.com/packagename <- body
wonderful package
注意:git send-email 命令由 git-email 软件包(v2.7 及更早版本中为 git-perl)提供。

请参阅 Development using git#Email_configuration 了解如何配置 SMTP 身份验证。

使用 'git send-email' 提交多个提交

如果您有多个提交,您可以创建一个包含补丁的目录并使用以下命令发送它们git send-email.

rm -Rf patches mkdir patches git format-patch -o patches origin git send-email patches --compose --no-chain-reply-to --to alpine-aports@lists.alpinelinux.org

您还可以使用以下命令为最后 x 个提交格式化补丁

git format-patch -x -o patches

这将为“patches”目录中的每个本地提交生成补丁并发送它们。使用 --no-chain-reply-to 以避免每个补丁都作为对上一个补丁的回复发送。

例如。

  • [PATCH 0/m]
    • [PATCH 1/m]
      • [PATCH 2/m]
        • ...

使用选项 --no-chain-reply-to,补丁将作为对第一封电子邮件(封面信,即 [PATCH 0/m])的回复发送,并将使电子邮件线程更清晰。像这样

  • [PATCH 0/m]
    • [PATCH 1/m]
    • [PATCH 2/m]
    • ..

重新发送更新的补丁

有时补丁会因补丁中的小问题而被拒绝。不要在您的初始错误补丁之上发送增量补丁。相反,重新创建补丁并发送新的、修复后的补丁版本。(使用 git commit --amend 编辑本地提交)。

当您发送补丁的第二个版本时,请使用 --subject-prefix "PATCH v2" 来指示这是一个先前发送的补丁的新版本。您也可以使用 --in-reply-to <message-id>,其中 <message-id> 是请求重新发送的电子邮件的 ID。

您还应该写一个关于更改内容的注释。为此使用 --annotate,并将注释写在三个破折号“---”下,以便注释不包含在提交消息中。例如

...
Subject: [PATCH v2] testing/mypackage: new aport

https://example.com
Example package
---
Changes v1 -> v2:
 - removed depends
 - added zlib-dev to makedepends

 testing/mypackage/APKBUILD | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)
 create mode 100644 testing/mypackage/APKBUILD
...

请注意,在“---”下方的注释将不会包含在提交消息中。