Android使用repo來管理多個Git項目。它須要一個manifest XML文件來指示這些git項目的屬性。android
repo manifest XML能夠包含下面的元素。
以以下,manifest片斷爲例:https://github.com/CyanogenMod/androidgit
<?xml version="1.0" encoding="UTF-8"?> <manifest> <remote name="github" fetch=".." review="review.cyanogenmod.org" /> <remote name="private" fetch="ssh://git@github.com" /> <remote name="aosp" fetch="https://android.googlesource.com" review="android-review.googlesource.com" revision="refs/tags/android-7.1.1_r6" /> <default revision="refs/heads/cm-14.1" remote="github" sync-c="true" sync-j="4" /> <!-- AOSP Projects --> <project path="build" name="CyanogenMod/android_build" groups="pdk,tradefed"> <copyfile src="core/root.mk" dest="Makefile" /> </project> <project path="build/blueprint" name="platform/build/blueprint" groups="pdk,tradefed" remote="aosp" /> <project path="build/kati" name="CyanogenMod/android_build_kati" groups="pdk,tradefed" /> <project path="build/soong" name="platform/build/soong" groups="pdk,tradefed" remote="aosp" > <linkfile src="root.bp" dest="Android.bp" /> <linkfile src="bootstrap.bash" dest="bootstrap.bash" /> </project> <project path="abi/cpp" name="platform/abi/cpp" groups="pdk" remote="aosp" /> <project path="art" name="CyanogenMod/android_art" groups="pdk" /> </manifest>
最頂層的XML元素。github
設置遠程git服務器的屬性,包括下面的屬性:shell
一個manifest文件中能夠配置多個remote元素,用於配置不一樣的project默認下載指向。bootstrap
設定全部projects的默認屬性值,若是在project元素裏沒有指定一個屬性,則使用default元素的屬性值。ubuntu
Example:api
<default remote="main" revision="platform/main"/>
指定一個須要clone的git倉庫。bash
Project元素下面會有兩個子元素。Copyfile和linkfile <copyfile src="core/root.mk" dest="Makefile" /> <linkfile src="root.bp" dest="Android.bp" /> Copefile:複製,cp src dest Linkfile:軟連接 ,ln -s src dest Example: <project groups="aosp" path="device/driver/armv7" revision="600aab270ce712b62b268055737cabcded59bf04"/>
經過name屬性能夠引入另一個manifest文件(路徑相對與manifest repository's root)。服務器
Android 使用 Git 做爲代碼管理工具,開發了 Gerrit 進行代碼審覈以便更好的對代碼進行集中式管理,還開發了 Repo 命令行工具,對 Git 部分命令封裝,將百多個 Git 庫有效的進行組織。ssh
所謂的清單庫,就是咱們爲manifest文件單獨建的一個庫,一個清單庫能夠包含多個清單文件和多個分支,每一個清單文件和分支都有對應的版本。咱們就是根據不一樣的manifest文件來下載不一樣的代碼。
在ubuntu中能夠經過命令進行repo的安裝:
Sudo apt-get install repo
也能夠直接下載repo文件,而後將路徑配置到環境變量裏面。
$ mkdir ~/bin $ PATH=~/bin:$PATH $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo
安裝 Repo 後,您能夠經過運行如下命令找到最新文檔(開頭是包含全部命令的摘要):
repo help
您能夠經過在 Repo 樹中運行如下命令來獲取有關某個命令的信息:
repo help <COMMAND>
例如,如下命令會生成 Repo init 參數的說明和選項列表,該參數會在當前目錄中初始化 Repo。(要了解詳情,請參閱 init。)
repo help init
Usage
repo init –u URL [OPTIONS]
在當前目錄中安裝 Repo。這會建立一個 .repo/ 目錄,其中包含用於 Repo 源代碼和標準 Android 清單文件的 Git 代碼庫。該 .repo/ 目錄中還包含 manifest.xml,這是一個指向 .repo/manifests/ 目錄中所選清單的符號連接。
Options:
命令repo init 要完成以下操做:
Usage
repo sync [<PROJECT_LIST>]
下載新的更改並更新本地環境中的工做文件。若是您在未使用任何參數的狀況下運行 repo sync,則該操做會同步全部項目的文件。
運行 repo sync 後,將出現如下狀況:
若是目標項目已同步過,則 repo sync 至關於如下命令:
git remote update git rebase origin/<BRANCH> 其中 <BRANCH> 是本地項目目錄中當前已檢出的分支。若是本地分支沒有在跟蹤遠程代碼庫中的分支,則相應項目不會發生任何同步。
Option:
Usage
repo start <BRANCH_NAME> [<PROJECT_LIST>]
從清單中指定的修訂版本開始,建立一個新的分支進行開發。
Usage
repo diff [<PROJECT_LIST>]
使用 git diff 顯示提交與工做樹之間的明顯更改。
Usage
repo prune [<PROJECT_LIST>]
刪減(刪除)已合併的主題。
Usage
repo status [<PROJECT_LIST>]
對於每一個指定的項目,將工做樹與臨時區域(索引)以及此分支 (HEAD) 上的最近一次提交進行比較。在這三種狀態存在差別之處顯示每一個文件的摘要行。
要僅查看當前分支的狀態,請運行 repo status。系統會按項目列出狀態信息。對於項目中的每一個文件,系統使用兩個字母的代碼來表示:
在第一列中,大寫字母表示臨時區域與上次提交狀態之間的不一樣之處。
{| | 字母 || 含義 || 說明 |- | - || 無更改 || HEAD 與索引中相同 |- | A || 已添加 || 不存在於 HEAD 中,但存在於索引中 |- | M || 已修改 || 存在於 HEAD 中,但索引中的文件已修改 |- | D || 已刪除 || 存在於 HEAD 中,但不存在於索引中 |- | R || 已重命名 || 不存在於 HEAD 中,但索引中的文件的路徑已更改 |- | C || 已複製 || 不存在於 HEAD 中,已從索引中的另外一個文件複製 |- | T || 模式已更改|| HEAD 與索引中的內容相同,但模式已更改 |- | U || 未合併 || HEAD 與索引之間存在衝突;須要解決方案 |}
在第二列中,小寫字母表示工做目錄與索引之間的不一樣之處。
{| | 字母 | 含義 | 說明 |- | - | 新/未知 | 不存在於索引中,但存在於工做樹中 |- | m | 已修改 | 存在於索引中,也存在於工做樹中(但已修改) |- | d | 已刪除 | 存在於索引中,不存在於工做樹中 |}
Usage
repo forall [<PROJECT_LIST>] -c <COMMAND>
在每一個項目中運行指定的 shell 命令。經過 repo forall 可以使用下列額外的環境變量:
Option: