此处记录的过程用于对单个项目(又名 git repo)进行更改。
但是我所做的更改(实现单个新功能)跨越多个项目,是否可以创建一个补丁来执行此操作,或者是否需要将其分解为单独的相互依赖的补丁?
此处记录的过程用于对单个项目(又名 git repo)进行更改。
但是我所做的更改(实现单个新功能)跨越多个项目,是否可以创建一个补丁来执行此操作,或者是否需要将其分解为单独的相互依赖的补丁?
我认为你应该将你的补丁分成每个项目的补丁。这就是我为什么这么认为的逻辑。每个 Android 项目都有自己的 .git 目录,即这些项目位于不同的 git 存储库中。Repo 工具只是对 git 命令的补充,即它不为您提供新功能。因此,您无法创建跨越项目的补丁(因为它们未连接)。因此,对于受新功能影响的每个 AOSP 项目,您需要将补丁分成单独的补丁。
要创建项目范围的差异,请使用以下命令:
repo diff > /path/to/store/patch/all-changes.diff
接下来,还可以repo forall -p -c git status
用来检查每个项目的状态。
repo forall -p -c git diff
将显示每个项目的差异。
甚至我也在试图弄清楚如何为单个项目生成补丁。但是,如果您了解AOSP
来源,那么所有项目都来自aosp_root/.repo/manifests/default.xml
如果你尝试类似的东西repo forall -p -c git diff > /path/to/patch/change.diff
,这个文件将包含所有的补丁。我还没有弄清楚如何提取-p
部分,打印项目名称(通常是 aosp_root 内的相对路径),并将其转换为补丁名称。
但是,这些东西在带有一些脚本的 bash 环境中确实不难。哎呀,我认为 repo 也是开源的,这意味着你甚至可以自己修改它!
如果您查看此清单,您应该注意到项目的解释方式与 git repo 项目相同,这些项目很容易克隆和复制补丁。虽然与 git 非常相似,但 AOSP 文件夹结构因设备、SOM 和 SOM 而异。由于路径和其他不同之处,实际创建单个项目变得更加困难。
我熟悉的一件事是使用splitpatch
linux 机器上的工具来拆分补丁。但是,这个工具和其他工具一样,会发现拆分AOSP补丁,因为许多文件具有相同的名称,例如,如果您Android.mk
跨多个项目进行更改,则补丁拆分器很难理解这种结构,因此认为修改了同一个文件一遍又一遍。
如果您参考 AOSP 文档,您会发现大量信息。现在,您将需要使用非传统搜索技术来实际找到其中的大部分。Google 在网络上提供的 AOSP 文档不足以理解所有内容。这只是一个起点。
实际文档位于特定项目中。如果您查看Readme
该项目或docs/
文件夹下的文件,那么您可能会发现更相关的内容。
说它没有很好的文档记录很容易,但实际上问题在于曝光和组织。有大量可用的文档,发现它经常是问题所在。