Git 是版本控制系统,我们使用 git 工具进行代码仓库和分支的管理。比如我可以使用 git clone
从远程仓库的一个分支下载代码到本地,使用 git push
将本地(仓库)分支推到远程(仓库)分支,更多关于git使用可以参考progit
Google 将 android 源码拆分成许多个 Git 仓库,我们知道每一个 git 仓库下有 .git
文件
hinzer@ubuntu:android-10$ find -name ".git"
./developers/demos/.git
./developers/build/.git
./developers/samples/android/.git
./.repo/repo/.git
./.repo/manifests/.git
./cts/.git
./platform_testing/.git
./prebuilts/go/linux-x86/.git
./prebuilts/go/darwin-x86/.git
./prebuilts/build-tools/.git
./prebuilts/clang/host/linux-x86/.git
./prebuilts/clang/host/darwin-x86/.git
./prebuilts/checkcolor/.git
./prebuilts/android-emulator/.git
./prebuilts/asuite/.git
./prebuilts/gradle-plugin/.git
./prebuilts/manifest-merger/.git
^C
然后 android 使用一个 Repo 仓库对这些拆分开来的 Git 仓库集中起来进行管理,在源码根目录下有一个 .repo
文件,其中 manifest.xml
是一个清单文件,记录了 远程分支/本地分支/本地目录
对应关系。
hinzer@ubuntu:android-10$ tree .repo -L 1
.repo
├── manifests # git仓库,清单文件列表
├── manifests.git
├── manifest.xml # 重要,当前清单文件的指向!!
├── project.list
├── project-objects
├── projects
└── repo # git仓库,包含repo运行的所有脚本
5 directories, 2 fileso
还有一个 repo 工具(通过 repo init 来初始化 Repo 仓库),这是一个 python 写的脚本,可以直接阅读源码(也就是可执行文件的位置)查看代码逻辑。
hinzer@ubuntu:android-10$ whereis repo
repo: /home/hinzer/bin/repo
hinzer@ubuntu:android-10$ cat /home/hinzer/bin/repo
...
...
repo
命令建立 Repo 仓库,同步 android 源码;使用 git
命令对我们修改的其中一个模块提交。