Android原始碼同步工具Repo

2021-07-11 13:14:55 字數 4358 閱讀 5913

整個android系統原始碼大約有500個左右大大小小的project,其中每個project都是使用git進行管理。為了對所有的這些project進行統一的管理操作,谷歌就用python開發了repo工具。本文主要介紹如何使用repo工具來對android原始碼進行管理。

repo的命令操作很簡單,常用的也就幾個,只要操作過很快就能夠熟練使用了。下面對這些常用命令進行介紹。

repo init -u  
該操作將會在當前目錄建立乙個.repo目錄,其中包括乙個repo的源**的git倉庫和乙個包含android manifest檔案的git倉庫。在.repo目錄下還包含了乙個manifest.xml檔案,它是乙個軟連線,指向.repo/manifest目錄的乙個manifest檔案(當前選擇的manifest)。

該命令包含的選項包括:

../repo/repo init -u git:

.tsinghua

.edu

.cn/android/platform/manifest -b android-5.1

.1_r6

可以看到-u指定了manifest倉庫的url,-b指定分支,-m並沒有指定,所以使用的是default.xml。

repo sync 
當執行rep sync的時候,主要做了如下操作:

git remote update 

git rebase origin/

是當前本地的project所checked-out的分支。如果本地分支沒有跟蹤乙個遠端分支,那麼該project將不會有同步發生。

當成功執行repo sync命令後,指定project的**將會與遠端倉庫的**同步。

該命令包含的選項有:

repo diff 
該命令就是對指定的每個project用git diff命令顯示project的修改狀態。

repo forall  -c 
在每個project中執行給定shell命令,有以下附加的環境變數可以使用:

該命令有以下選項:

repo start 

基於manifest中指定的revision建立乙個新分支用於開發。

repo status 
對於每個指定的project,將工作樹、暫存區和當前分支最近的commit進行比較。對於有差異的檔案將其用一行顯示出來。其中有差異的檔案的修改狀態使用兩個字母進行表示。

第乙個字母是大寫,表示該檔案在暫存區與當前分支的最新commi有不同:

letter

meaning

description

-no change

same in head and index

aadded

not in head, in index

mmodified

in head, modified in index

ddeleted

in head, not in index

rrenamed

not in head, path changed in index

ccopied

not in head, copied from another in index

tmode changed

same content in head and index, mode changed

uunmerged

conflict between head and index; resolution required

第二個字母是小寫的,表示該檔案在當前工作目錄與暫存區不一致:

letter

meaning

description

-new/unknown

not in index, in work tree

mmodified

in index, in work tree, modified

ddeleted

in index, not in work tree

如果有不熟悉的命令就通過repo help檢視手冊,其中對於每個命令,還可以通過指定–help 檢視該命令的手冊,如:

repo

sync--

help

name="aosp"

fetch=".." />

revision="refs/tags/android-5.1.1_r6"

remote="aosp"

sync-j="4" />

path="build"

name="platform/build"

groups="pdk,tradefed">

project>

path="abi/cpp"

name="platform/abi/cpp"

groups="pdk" />

path="art"

name="platform/art"

groups="pdk" />

path="bionic"

name="platform/bionic"

groups="pdk" />

path="bootable/bootloader/legacy"

name="platform/bootable/bootloader/legacy"

groups="pdk-cw-fs" />

path="bootable/recovery"

name="platform/bootable/recovery"

groups="pdk" />

......

path="tools/studio/cloud"

name="platform/tools/studio/cloud"

groups="notdefault,tools" />

path="tools/studio/translation"

name="platform/tools/studio/translation"

groups="notdefault,tools" />

path="tools/swt"

name="platform/tools/swt"

groups="notdefault,tools" />

path="tools/tradefederation"

name="platform/tools/tradefederation"

groups="notdefault,tradefed" />

manifest>

可以看到該xml檔案主要包括3種元素:remotedefaultproject

預先定義每個project中能夠指定的remote,remote的功能見下面。

預設的remote,如果project中沒有指定remote,則使用該remote。

指定整個android原始碼的每乙個project的配置,它包括以下屬性值:

唯一的該project的名字。

remote為project的遠端倉庫的url字串前面的定義,需要與name拼接成該project的遠端倉庫的實際的url位址。每個project的倉庫的在原始碼伺服器中的實際路徑應該為,remote中指定的路徑 + project的name屬性值,即:

$/$.git
如果project沒有指定remote,就使用default元素中定義的remote。

platform/abi/cpp,該project在原始碼伺服器中的遠端倉庫的實際路徑為:

/../platform

/abi/cpp.git

該project在本地原始碼中的路徑,如果沒有指定,那就使用project的name的值,如果該project還有乙個父元素,那麼path會以父元素的path作為字首。

該project需要跟蹤的遠端git倉庫的分支名。

該project的git ref名,可以是乙個sha1值。用於當以以-c模式同步乙個revision的時候鎖定manifest,從而避免同步全部的ref空間。

[1]

[2]

[3]

Android 8 0 0 r4原始碼目錄結構詳解

解決底層問題方法 解除android系統的耦合 1 將dalvik於bionic以及硬體驅動剝離開 2 修改dalvik以支援標準glibc和gnu linux 3 把dalvik當作普通應用程式 4 dalvik可被單獨優化和改進 benchmarks 程式測試基準。build 編譯檔案。libc...

獲取Android原始碼

git是linux torvalds為了幫助管理linux核心開發而開發的乙個開放原始碼的公布式版本控制軟體。在git版本控制系統中,每乙個工作目錄都包含乙個完整倉庫,它們支援離線工作。android是由kernel dalvik bionic build等多個git專案組成的,所以android專...

android 原始碼更新

copy一篇在這裡,操作是有效的。另外其實用git還是有很多經驗了,所以這篇對比了下讚!官方的總是最靠譜 另乙個靠譜的就是它了 copy from 檢視可切換的分支 cd repo manifests git branch a cut d f 3 以 gingerbread release 分支為例...