如何提交补丁
初始设置
如果您尚未成功下载源代码并生成 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>
<project path>
项目中启动一个名为 <branch name>
的新分支。将 <project path>
替换为您的目标仓库的路径。切换到包含您要编辑的文件的项目(目录)
cd path/to/project
进行您需要的所有更改。
repo start
之前不要提交任何更改,否则您的更改将发生在不同的分支上,并且不会被正确跟踪。在您进行更改后,您可以像往常一样提交它们
git add <file you edited>
git commit
或者,您可以运行 git add .
来暂存所有更改。
现在您可以将您的更改上传到 Gerrit
repo upload .
repo upload <project path>
。就这样!您的更改将被审核,并可能被接受或拒绝。请参阅下面的 #示例案例。
提交补丁集
您的提交补丁可能存在问题或错误,这些问题或错误在代码审查中被指出,因此您需要解决它们。有时只是一些制表符而不是空格,或者字符串和变量名中的拼写错误。为了避免一些形式上的错误,请确保您熟悉 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 log
和 git 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) 添加审核者
- 对于设备/内核仓库,添加您的设备的维护者
- 对于各种特殊项目(如本 Wiki)的更改,请参阅此处列出的维护者。请注意,可以通过在审核者字段中键入 “Wiki Editors” 直接添加 Wiki 编辑者
- 对于所有其他仓库,添加可信审核者或提交者
2) 设置适当的标签以指示您的补丁已准备就绪
常用命令
有关更多信息,请参阅Git Immersion。
repo
-
repo abandon <branch name>
放弃任何尚未上传的更改(提交)。 -
repo start <branch> <project>
启动 repo 监听通过 git 进行的更改。 -
repo upload <project name>
将已提交的更改上传到远程审核服务器。
git
-
git add <file name>
暂存已更改或添加的文件。 -
git commit -m "comment"
提交更改。 -
git reset HEAD <file name>
取消暂存文件。 -
git revert HEAD
撤消上次提交。 -
git status
查看项目的状态。
git 子命令
-
--date="DATE"
如果需要,指定更改的日期。DATE 必须是 RFC 2822、ISO 8601 或 git 内部时间格式。示例
-
RFC 2822: Wed, 17 Jan 2018 17:39:48 +0100
-
ISO 8601: 2018-01-17T17:39:48+0100
-
git 内部格式: 1516210788 +0100
-
-
--author="NAME <EMAIL>"
如果补丁不是您自己编写的,则命名作者。 -
--amend
修改上次提交。