前言

本文是摘抄的,主要是需要一些repo的使用。

记录一下,方便自己查阅。

正文

repo用法的基本形式为:

repo <COMMAND> <OPTIONS>

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

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

help

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

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

repo help <COMMAND>

init

$ 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

repo sync [<PROJECT_LIST>]

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

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

  1. 如果之前未进行过同步,那么等同于git clone, 所有远程的分支都被复制到本地.

  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

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

# 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和当前工作树的修改

repo diff [<PROJECT_LIST>]

download

repo download <TARGET> <CHANGE>

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

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

$ repo download platform/build 23823

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

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

forall

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

repo prune [<PROJECT_LIST>]

修剪/删除已经合并的topic

start

repo start <BRANCH_NAME> [<PROJECT_LIST>]

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

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

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

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

status

repo status [<PROJECT_LIST>]

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

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

参考文章

  1. repo命令参考手册

相关文章

暂无评论

none
暂无评论...