簡體   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