将供应商的Android变化整合到aosp中

时间:2014-10-10 00:22:55

标签: git android-source git-repo

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

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

  2. 供应商补丁基于标签“android-4.3_r2.1”。所以我初始化了一个本地仓库并修改了清单文件。

  3.   

    repo 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. “repo sync”已成功完成。应用供应商提供的补丁。这为修补程序修改和/或添加的每个git项目创建了一个分支“供应商”。

    2. 现在我有一个基于标签“android-4.3_r2.1”的回购,一些项目有一个分支“供应商”。没有一个项目有“主”分支!

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

      repo checkout refs/tags/android-4.3_r2.1
      repo forall -c git checkout -b master
      repo forall -c git merge vendor
      
      1. 最后一个问题是使用repo将更改推送到本地镜像。似乎repo上传仅在您使用gerrit服务器时才有效。这真的有必要吗?
      2. TIA

1 个答案:

答案 0 :(得分:2)

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

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

我很确定你的每一个项目都有一个主分支 - 在“aosp”遥控器上。我建议您为您的改编选择另一个分支名称以及从供应商处获得的补丁。事实上,完全选择不同的命名空间是明智的。如果您的公司或组织名为Acme,您可以将所有分支机构置于acme /,acme / master,acme / vendor等处。 (我更喜欢这样做,即将上游分支填充到单独的命名空间,如aosp /和caf /。这样,您实际处理的分支没有前缀,您可以有多个上游。)< / p>

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

后者显然要求您在每次分支git时更新清单。另一方面,你不会乱扔所有带有不必要分支的gits,你可以快速浏览清单文件,看看哪些gits是分支,哪些是直接来自上游。此外,如果您分支所有gits,从上游获取新版本可能需要更多工作。请记住,上游可能会切换到git的另一个分支,因此即使对于未触及的gits,您也可能获得非快速更新。下面的示例显示了如何将acme / master从1.2.3更新为1.2.4作为快进,因此您必须进行非快进更新(通常不推荐),从1.2合并。 3进入acme / master(可能导致冲突并永远无法快速更新),或者创建一个基于1.2.4的新分支。

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

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

是的,repo upload适用于Gerrit,您当然不需要(尽管我推荐它用于代码审查功能)。你可以像往常一样用Git推送。我看到你已经找到了repo forall命令非常有用。