keyboard_arrow_left 返回概览

如何提交补丁

初始设置

如果您尚未成功下载源代码并生成 LineageOS 的构建版本,请确保您熟悉这些步骤。有关构建的信息可在您的设备的构建指南中找到。

Gerrit 上设置帐户,签署贡献者协议,并在 Gerrit 门户的 Settings -> HTTP Password 下配置您的 Gerrit 用户名。

现在确保您的本地 git 用户名与您的 Gerrit 用户名匹配

git config --global user.email '[email protected]'
git config --global review.review.lineageos.org.username "gerritUsername"

如果您已经设置了 SSH 密钥(例如,用于 GitHub),请跳过以下两个步骤。

生成 SSH 密钥,[1]

ssh-keygen -t ed25519 -C "[email protected]"

将密钥添加到 ssh-agent

eval `ssh-agent -s`
ssh-add ~/.ssh/id_ed25519
ssh-add

如果您使用的是 macOS,则需要运行以下命令之一

# macOS 11.x or older:
ssh-add -K ~/.ssh/id_ed25519 && ssh-add -A

# macOS 12.x and newer:
ssh-add --apple-use-keychain ~/.ssh/id_ed25519 && ssh-add --apple-load-keychain

之后,将 ~/.ssh/id_ed25519.pub 的内容复制/粘贴到您的 Gerrit SSH 设置中的 Settings -> SSH Keys 下。

现在,尝试以下命令,看看您是否可以成功通过身份验证连接到 Gerrit

ssh [email protected] -p 29418

如果上述命令返回 “Bad server host key: Invalid key length”,您需要将以下行添加到 ~/.ssh/config

Host review.lineageos.org
    RSAMinSize 0

否则,它应该显示

  ****    Welcome to Gerrit Code Review    ****

  Hi {name}, you have successfully connected over SSH.

  Unfortunately, interactive shells are disabled.
  To clone a hosted Git repository, use:

  git clone ssh://[email protected]:29418/REPOSITORY_NAME.git

Connection to review.lineageos.org closed.

为了避免在提交消息中出现重复的 Change-Id: 尾部,尤其是在 cherry-pick 更改时,请使 Change-Id: 成为 git 的已知尾部

git config --global trailer.changeid.key "Change-Id"

以上步骤只需执行一次。

准备构建环境

转到源代码的根目录

cd ~/android/lineage

设置您的构建环境

source build/envsetup.sh

本指南的其余部分将依赖于此操作的完成。您可以通过键入以下内容来检查命令是否正确执行

croot

您的 shell 将导航到源的根目录,~/android/lineage 或给出错误。

提交到 Gerrit

上传您的更改

首先,您需要启动一个主题分支。此分支保存您对计算机上的文件所做的更改,您最终将这些更改发送到 LineageOS 的 Gerrit 实例以进行审核。创建您的主题分支

repo start <branch name> <project path>

切换到包含您要编辑的文件的项目(目录)

cd path/to/project

进行您需要的所有更改。

在您进行更改后,您可以像往常一样提交它们

git add <file you edited>
git commit

或者,您可以运行 git add . 来暂存所有更改。

现在您可以将您的更改上传到 Gerrit

repo upload .

就这样!您的更改将被审核,并可能被接受或拒绝。请参阅下面的 #示例案例

提交补丁集

您的提交补丁可能存在问题或错误,这些问题或错误在代码审查中被指出,因此您需要解决它们。有时只是一些制表符而不是空格,或者字符串和变量名中的拼写错误。为了避免一些形式上的错误,请确保您熟悉 Android 代码风格。对于 Eclipse 用户,只需按照 development/ide/eclipse/README.importing-to-eclipse.txt 中的说明进行操作即可。

在您编辑这些文件之前,请确保您位于正确的分支上

git branch

如果您不在或根本不在任何分支中,请切换到正确的分支

git checkout [branchname]

现在您可以编辑您想要的文件。之后,执行通常的 git status 并注意 git diff 将只显示您刚刚所做的更改。确保您使用 git add 添加了您修改的文件。一旦您满意,通过修改您的提交来准备上传

git commit --amend

这将打开一个编辑器,其中包含您的初始提交消息。您可以根据需要更改提交消息,但请确保以 Change-Id 开头的行保持不变,因为它包含初始更改 ID。通过此 ID,Gerrit 会将您的上传检测为补丁集,而不是新补丁。

您可以再次执行 git loggit status。注意 git 如何将您的初始提交和修改后的提交作为一个单独的补丁处理。git show 会显示您对该提交所做的所有更改。

最后,您可以通过键入以下内容将您的补丁集提交到您的初始补丁

repo upload .

示例案例

编辑 InputDevice.java

假设您想在 frameworks/base 项目中的 InputDevice.java 中进行更改,并将该更改上传到 Gerrit 以进行审核。启动该仓库(目录)的本地分支并将其命名为 mychanges

cd frameworks/base
repo start mychanges .

对该文件进行编辑。您可以检查这些更改

git add InputDevice.java -n

如果结果可以接受,请暂存修改后的文件

git add InputDevice.java

然后提交它

git commit -m 'Added feature xyz'

发出上传

repo upload .

您应该会被问到几个问题,然后您的提交应该会被上传到 Gerrit 以进行审核。

添加 AWEXT 支持

启动新分支

cd external/wpa_supplicant
repo start mychanges-wpa_supplicant .

进行更改,编辑一些文件,添加新驱动程序等等。

git add .
git commit -m 'Added AWEXT drivers'
repo upload .

故障排除

[1] 如果您收到 “Permission denied (publickey)” 错误,并且您确定一切都正确,请尝试使用 RSA 密钥而不是 ED25519。

ssh-keygen -t rsa -C "[email protected]"

获取您的提交审核/合并

所有提交的补丁在合并之前都会经过代码审查流程。除了同行评审外,某些项目成员有能力将您的更改合并到 LineageOS 中。为了确保他们收到通知

1) 添加审核者

2) 设置适当的标签以指示您的补丁已准备就绪

常用命令

有关更多信息,请参阅Git Immersion

repo

git

git 子命令

资源

Git Immersion

Git 和 repo 概览

Gerrit 文档