Contents
  1. 1. help
  2. 2. init
  3. 3. sync
  4. 4. upload
  5. 5. diff
  6. 6. download
  7. 7. forall
  8. 8. prune
  9. 9. start
  10. 10. status

repo用法的基本形式为:

1
repo <COMMAND> <OPTIONS>

可选项在[]中表示,例如许多命令接收一个项目列表作为参数,你可以通过一组名字或者p本地源目录的path来指定项目列表.

1
2
repo sync [<PROJECT0> <PROJECT1> <PROJECTN>]
repo sync [</PATH/TO/PROJECT0> ... </PATH/TO/PROJECTN>]

help

使用help命令可以获得最新的帮助文档,由各子命令来组织.

你也可以查看子命令的帮助

1
repo help <COMMAND>

init

1
$ repo init -u <URL> [<OPTIONS>]

在当前目录安装repo, 将创建一个.repo目录,内含源代码的git仓库和标准android manifest 文件, 同时还有一个manifest.xml文件,指向.repo/manifests/目录中的定manifest.
参数:

-u URL,指定manifest位置

-m 选择仓库中的manifest文件,缺省为default.xml

-b 指定revision, 如一个特定的manifest分支.

repo的其它命令需要在.repo的父目录或者某一子目录中执行

sync

1
repo sync [<PROJECT_LIST>]

下载新更改,并更新本地环境中的工作文件,如果不带参数,将同步所有的项目的所有文件.

当运行repo sync时,会执行以下操作:

  1. 如果之前未进行过同步,那么等同于git clone, 所有远程的分支都被复制到本地.
  2. 如果之前同步过,那么等同于:
    1
    2
    git remote update
    git rebase origin/<BRANCH>

其中<branch>指当前本地目录所有的分支, 如果本地分支没有track远程分支,则不会同步.

  1. 如果rebase发生冲突, 需要使用git命令来Fix冲突,如git rebase --continue.

sync成功之后, 指定项目中的代码更新到最新.

选项:

-d 将指定的项目切换回指定的manifest revision, 当项目处于topic分支,但需要manifest revision时有用

-s sync到一个已知的良好的build, 由当前manifest中的manifest-server元素指定.

-f 当某个project同步失败时继续sync

upload

1
repo upload [<PROJECT_LIST>]

repo会比较指定项目的本地和远程最新更新,提示你选择尚未提交的项目

选择完成以后,repo会将项目的所有commit上通过HTTPS传到gerrit,你需要设置认证信息.访问此处Password Generator可以生成一对新的username/password对.

当gerrit收到对象数据时, 会将每个commit转换为修改,这样review人员可以对每一处评论. 如果想合并commit,可以在upload前执行git rebase -i操作.

如果upload时不指定项目列表,它会搜寻所有项目更改.

如果upload之后要更改编辑,可以使用git rebase -igit commit --amend来更新本地commit,之后:

  • 确认当前branch是要提交的branch
  • 对序列中每个要提交的commit,在括号中输入gerrit修改id
1
2
3
4
5
# Replacing from branch foo
[ 3021 ] 35f2596c Refactor part of GetUploadableBranches to lookup one specific...
[ 2829 ] ec18b4ba Update proto client to support patch set replacments
# Insert change numbers in the brackets to add a new patch set.
# To create a new change record, leave the brackets empty.

上传完成后,修改将会有附加的Patch集.

diff

基于git diff, 显示commit和当前工作树的修改.

1
repo diff [<PROJECT_LIST>]

download

1
repo download <TARGET> <CHANGE>

下载指定的修改并应用到工作目录中.

如download 23823号修改到本地目录platform/framworks/base/

1
$ repo download platform/build 23823

repo sync会移除通过download检索过的修改, 你可也以切换远程分支git checkout m/master

从Gerrit看到修改到用户可以下载,是有一小段延迟的,因为冗余备份的缘故.

forall

1
repo forall [<PROJECT_LIST>] -c <COMMAND>

在指定的项目中逐个执行<command>, 可以使用以下环境变量

REPO_PROJECT 设置唯一的项目名
REPO_PATH 相对client root的相对路径
REPO_REMOTE manifest中的远程系统名
REPO_LREV manifest中的revision name翻译到本地tracking分支,当需要传递manifest的revision到本地执行的git命令的使用。
REPO_RREV 等于manifest中的revision name。

选项:

-c 需要执行的命令与参数,由/bin/sh解释
-p 在显示执行结果前打印项目headers, 通过bind管道到命令的Stdin , stdout和stderr来实现
-v 显示stderr信息

prune

1
repo prune [<PROJECT_LIST>]

修剪/删除已经合并的topic

start

1
repo start <BRANCH_NAME> [<PROJECT_LIST>]

从manifest中指定的revision创建一个新分支

<BRANCH_NAME> 应该是对该分支将要做的修改的简短描述,如果不确定,应该填入分支名字。

<PROJECT_LIST> 指定哪些项目将参与此topic分支

.当前工作目录所有项目的简写

status

1
repo status [<PROJECT_LIST>]

将当前工作树与列表中的每个项目的HEAD所在进行比较,并以行概要的形式打印每个文件的不同。

如果只打印当前项目的diff信息,直接运行repo status

Contents
  1. 1. help
  2. 2. init
  3. 3. sync
  4. 4. upload
  5. 5. diff
  6. 6. download
  7. 7. forall
  8. 8. prune
  9. 9. start
  10. 10. status