繁体   English   中英

将供应商的Android更改集成到aosp中

[英]integrating vendor Android changes into aosp

我正在尝试将AOSP设备更改集成到标准AOSP,本地镜像中。 这有点令人困惑,但我会尽量保持清楚。

  1. 我在服务器(不同的本地计算机)上创建了AOSP存储库的本地镜像。

  2. 供应商补丁基于标签“ android-4.3_r2.1”。 因此,我初始化了本地存储库并修改了清单文件。

回购init -u ssh:// localserver / git / aosp / mirror / platform / manifest -b android-4.3_r2.1

更改.repo / manifest.xml如下:

  <remote  name="aosp"
           fetch="ssh://localserver/git/aosp/mirror" />  
  <default revision="refs/tags/android-4.3_r2.1"
           remote="aosp"
           sync-j="8" />
  1. “回购同步”成功完成。 应用了供应商提供的补丁。 这为补丁修改和/或添加的每个git项目创建了一个分支“供应商”。

  2. 现在我有一个基于标签“ android-4.3_r2.1”的仓库,一些项目有一个分支“ vendor”。 这些项目都没有“ master”分支!

您如何将所有这些结合在一起以创建可行的存储库? 我仍在学习。 这是正确的吗?

repo checkout refs/tags/android-4.3_r2.1
repo forall -c git checkout -b master
repo forall -c git merge vendor
  1. 最后一个问题是使用回购将更改推送到我们的本地镜像。 看来,只有在使用Gerrit服务器的情况下,回购上传才有效。 这真的有必要吗?

TIA

无需更改清单以指向您的Git服务器。 android-4.3_r2.1清单中的.. URL表示git URL将相对于清单的URL。 换句话说,如果您从本地镜像克隆清单,则其余的git也将从本地镜像中获取。

当您谈论供应商分支和主分支时,我假设您是在谈论本地分支(即在git branch输出中可见)。 在这个答案中,我将忽略这些,仅谈论远程分支。 他们才是最重要的。 使用Repo,默认情况下您不会获得任何本地分支机构,并且任何本地分支机构的名称都取决于每个人。

我很确定您的每个项目都在“ aosp”遥控器上有一个主分支。 我建议您为您的改编和从供应商处获得的补丁选择另一个分支名称。 实际上,明智的做法是完全选择其他名称空间。 如果您的公司或组织的名称是Acme,则可以将所有分支机构都置于acme /下,因此也可以将acme / master,acme / vendor等等。 (我更喜欢用另一种方法,即将上游分支填充到单独的名称空间中,例如aosp /和caf /。这样,您实际使用的分支就没有前缀,并且可以有多个上游。)

将所有这些内容都放入工作的存储库中将涉及更新清单以指向您正在工作的分支。 如果您将本地供应商分支推送到acme / vendor,则清单应指向acme / vendor。 由您决定是否在每个单独的git中创建一个acme / vendor分支并更改清单中的默认修订版,或者是否只想将分支推送到实际需要的位置,并有选择地覆盖这些git的修订版。

后者显然要求您每次分支git时都要更新清单。 另一方面,您不会乱扔所有带有不必要分支的git,并且可以快速浏览清单文件,查看哪些git是分支,哪些是直接从上游来的。 另外,如果分支所有git,从上游获取新版本可能会需要更多工作。 请记住,上游可能会为git切换到另一个分支,因此即使您没有接触过git,您也可能会获得非快速转发更新。 下面的示例说明了如何无法将acme / master从1.2.3更新为1.2.4,作为快速转发,因此您要么必须进行非快速更新(通常不建议),然后从1.2合并。 3转换为acme / master(可能的结果和冲突,并永远无法进行快速转发更新),或根据1.2.4创建新分支。

         -----1.2.3 (acme/master)     -----1.2.4
        /                            /
 ------------------------------------

不要忘记分支清单。 回购以特殊方式处理清单git,它假定所有更改均在名为“默认”的分支上进行。 因此,只需编辑清单文件,提交更改,然后使用git push origin HEAD:refs/heads/acme/master推送它。 之后,您可以使用repo init -u ... -b acme/master初始化一个新的工作区。

是的, repo upload是与Gerrit一起使用的,您当然不需要(尽管我建议使用它作为代码审查功能)。 您可以像平时一样推动Git。 我看到您已经找到了repo forall命令,该命令非常有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM