Android 为企业提供一个新的市场,无论大企业,小企业都是处于同一个起跑线上。研究 Android 尤其是 Android 系统核心或者是驱动的开发,首先需要做的就是本地克隆建立一套 Android 版本库管理机制。
Android 使用 Git 作为代码管理工具,开发了 Gerrit 进行代码审核以便更好的对代码进行集中式管理,还开发了 Repo 命令行工具,对 Git 部分命令封装,将百多个 Git 库有效的进行组织。要想克隆和管理这百多个 Git 库,还真不是一件简单的事情。
$mkdir test
$cd test
$git clone git://172.16.1.11/repo.git
于是在test目录下便有repo文件夹,里面包含了repo的源代码,里面有个repo脚本,用它来执行repo指令
$repo/repo init -u git://172.16.1.11/manifest.git
在test目录下面出现了.repo文件夹。
在manifests文件夹里面包含8个xml文件,是我们自己定义的。
命令repo init 要完成如下操作:
Ø 完成repo工具的完整下载,执行的repo脚本只是引导程序
Ø 克隆清单库manifest.git (地址来自于-u 参数)
Ø 克隆的清单库位于manifest.git中,克隆到本地.repo/manifests.清单.repo/manifest.xml只是符号链接,它指向.repo/manifests/default.xml
Ø 命令repo init还可以负担参数—mirror,可以建立和上游版本库一摸一样的镜像。
Ø manifests中有8个xml文件,repo init 可以任意选择其中一个,默认选择是default.xml
$repo/repo init -u git://172.16.1.11/manifest.git –m android.xml
Ø 选择的是android.xml里面的配置,.repo/manifest.xml便指向.repo/manifests/android.xml
u 这个xml的顶级元素是manifest
u 通过remote元素,定义了名为korg的远程版本库,并定义了远程版本库的地址镜像fetch
u default元素定义了本地版本 revision
u 项目project ,path指的是克隆到本地的相对路径,name指的是远程仓库的相对路径,revision指的是提交代码的哈希值,用它来选择所克隆的版本
u project元素的子元素copyfile定义了克隆后的一个附件动作:从src拷贝文件至dest。
$repo/repo sync
执行这条命令,会参照.repo/manifest.xml清单文件,将项目所有相关的版本库全部克隆出来,也可以选择克隆其中的一个项目:
$repo/repo sync lichee/buildroot
经过此操作,就可以对其进行相应的操作
主要完成克隆清单库minifest.git
用于参照清单文件克隆并同步版本库。如果某个项目版本库尚不存在,则执行repo sync 命令相当于执行git clone,如果项目版本库已经存在,则相当于执行下面的两条指令:
n git remote update
相当于对每一个remote源执行了fetch操作
n git rebase origin/branch
针对当前分支的跟踪分支执行rebase操作
实际是对git checkout –b 命令的封装
repo start <newbranchname> [--all | <project>…]
实际上是对git diff-index、git diff-filse命令的封装,同时显示暂存区的状态和本地文件修改的状态
实际上是对git checkout 命令的封装
读取各个项目分支立标并汇总显示。
实际是对git diff 命令的封装
实际是对git add 命令的封装、
相当于git push。
主要用于代码审核者下载和评估贡献着提交的修订
参考:
http://wenku.baidu.com/view/672c8faddd3383c4bb4cd257.html