1

此处记录的过程用于对单个项目(又名 git repo)进行更改。

但是我所做的更改(实现单个新功能)跨越多个项目,是否可以创建一个补丁来执行此操作,或者是否需要将其分解为单独的相互依赖的补丁?

4

2 回答 2

1

我认为你应该将你的补丁分成每个项目的补丁。这就是我为什么这么认为的逻辑。每个 Android 项目都有自己的 .git 目录,即这些项目位于不同的 git 存储库中。Repo 工具只是对 git 命令的补充,即它不为您提供新功能。因此,您无法创建跨越项目的补丁(因为它们未连接)。因此,对于受新功能影响的每个 AOSP 项目,您需要将补丁分成单独的补丁。

于 2012-11-07T09:05:30.230 回答
1

要创建项目范围的差异,请使用以下命令: 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 而异。由于路径和其他不同之处,实际创建单个项目变得更加困难。

我熟悉的一件事是使用splitpatchlinux 机器上的工具来拆分补丁。但是,这个工具和其他工具一样,会发现拆分AOSP补丁,因为许多文件具有相同的名称,例如,如果您Android.mk跨多个项目进行更改,则补丁拆分器很难理解这种结构,因此认为修改了同一个文件一遍又一遍。

如果您参考 AOSP 文档,您会发现大量信息。现在,您将需要使用非传统搜索技术来实际找到其中的大部分。Google 在网络上提供的 AOSP 文档不足以理解所有内容。这只是一个起点。

实际文档位于特定项目中。如果您查看Readme该项目或docs/文件夹下的文件,那么您可能会发现更相关的内容。

说它没有很好的文档记录很容易,但实际上问题在于曝光和组织。有大量可用的文档,发现它经常是问题所在。

于 2021-07-20T16:34:04.570 回答