Android 使用 Git 作为代码管理工具, 开发了 Gerrit 进行代码审核以便更好的对代码进行集中式管理,
还开发了 Repo 命令行工具,对 Git 部分命令封装,将百多个 Git 库有效的进行组织.
https://source.android.com/source/build-numbers#source-code-tags-and-builds
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
export REPO_URL='https://gerrit-googlesource.proxy.ustclug.org/git-repo'
repo init -u git://mirrors.ustc.edu.cn/aosp/mirror/manifest --mirror
repo sync
/usr/bin/git daemon --verbose --export-all --base-path=/mnt /mnt/mirror-aosp
repo init -u git://127.0.0.1/mirror-aosp/platform/manifest
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-8.0.0_r1
repo sync
cd .repo/manifests
git branch --all
repo branch
repo start android-8.0.0_r23 --all
对 git checkout 的封装,但不能带-b参数,所以不能用此命令来创建特性分支
repo checkout android-8.0.0_r23
git diff 的封装,用于分别显示各个项目工作区下的文件差异
repo diff ---查看所有项目
repo diff platform/build platform/bionic ---只查看其中两个项目
对 git add --interactive 的封装, 用于挑选各个项目工作区中的改动以加入暂存区
repo stage -i […]
-i 代表 git add --interactive 命令中的 --interactive, 给出个界面供用户选择
对 git branch –d 的封装,该命令用于扫面项目的各个分支,并删除已经合并的分支
repo prune […]
对git branch –D 的封装
repo abandon […]
repo status
对 git diff-index, git diff-filse 的封装, 同时显示暂存区的状态和本地文件修改的状态
每个小节的首行显示羡慕名称,以及所在分支的名称,
第一个字母表示暂存区的文件修改状态
-:没有改变
A:添加(不在HEAD中,在暂存区中)
M:修改(在HEAD中,在暂存区中,内容不同)
D:删除(在HEAD中,不在暂存区)
R:重命名(不在HEAD中,在暂存区,路径修改)
C:拷贝(不在HEAD中,在暂存区,从其他文件拷贝)
T:文件状态改变(在HEAD中,在暂存区,内容相同)
U:未合并,需要冲突解决
第二个字母表示工作区文件的更改状态
-:新/未知(不在暂存区,在工作区)
m:修改(在暂存区,在工作区,被修改)
d:删除(在暂存区,不在工作区)
两个表示状态的字母后面,显示文件名信息。如果有文件重名还会显示改变前后的文件名及文件的相似度
这个指令是根据xml文件添加的远程分支, 方便于向服务器提交代码, 执行之后的build目录下看到新的远程分支org
repo remote add […]
repo remote rm […]
repo push [--all |…]
repo会自己查询需要向服务器提交的项目并提示用户.
repo forall […] –c
迭代器,可以在所有指定的项目中执行同一个shell指令
Options:
-c:后面所带的参数着是shell指令
-p:在shell指令输出之前列出项目名称
-v:列出执行shell指令输出的错误信息
additional environment variables:
REPO_PROJECT:指定项目的名称
REPO_PATH:指定项目在工作区的相对路径
REPO_REMOTE:指定项目远程仓库的名称
REPO_LREV:指定项目最后一次提交服务器仓库对应的哈希值
REPO_RREV:指定项目在克隆时的指定分支,manifest里的revision属性
如果-c后面所带的shell指令中有上述环境变量,则需要用单引号把shell指令括起来.
repo forall –c 'echo $REPO_PROJECT'
repo forall -c "pwd;git clean -f;git checkout -f";repo sync -c --no-tags;repo sync -l;
把所有项目多切换到master分支,执行以下指令将topic分支合并到master分支
repo forall –p –c git merge topic
在所有项目下打标签
repo forall –c git tag crane-stable-1.6
引用环境变量REPO_PROJECT添加远程仓库:
repo forall –c ‘git remote add korg ssh://[email protected]/$REPO_PROJECT.git’
repo forall –c git remote add korg
repo forall –c git branch crane-dev
repo forall –c git checkout –b crane-dev
对 git grep 的封装,用于在项目文件中进行内容查找
repo manifest –o android.xml
repo version
repo upload相当于git push,但是又有很大的不同,它不是将版本库改动推送到克隆时的远程服务器,
而是推送到代码审核服务器(Gerrit软件架设)的特殊引用上,使用SSH协议.
代码审核服务器会对推送的提交进行特殊处理,将新的提交显示为一个待审核的修改集,并进入代码审查流程,
只有当审核通过后,才会合并到官方正式的版本库中.
repo upload [--re --cc] {[]… | --replace }
Options:
-h, --help:显示帮助信息
-t:发送本地分支名称到Gerrit代码审核服务器
--replace:发送此分支的更新补丁集
--re=REVIEWERS:要求指定的人员进行审核
--cc=CC:同时发送通知到如下邮件地址
主要用于代码审核者下载和评估贡献者提交的修订
repo download {project change [patchset]}…
用于repo自身的更新
参考:
https://blog.csdn.net/sunweizhong1024/article/details/8987494