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: