Repo 命令详解
使用 Repo 需遵循的格式如下:
repo command options
可选元素显示在方括号 [ ] 中。例如,许多命令会用到项目列表 (project-list) 参数。项目列表可以是一个名称列表,也可以是一个本地源代码目录的路径列表:
repo sync [project0 project1 … projectn]
repo sync [/path/to/project0 … /path/to/projectn]
help
安装 Repo 后,可以通过运行以下命令找到说明信息:
repo help
也可以通过在 Repo 树中运行以下命令来获取有关某个命令的信息:
repo help command
例如,以下命令会生成 Repo init 参数的说明和选项列表,该参数会在当前目录中初始化 Repo(要了解详情,请参阅 init)。
repo help init
init
在当前目录中安装 Repo。执行该命令后悔在当前目录中创建一个 .repo/ 目录,其中包含 Repo 源代码和标准 Android 清单文件的 Git 代码库。该 .repo/ 目录中还包含 manifest.xml,该文件是一个指向 .repo/manifests/ 目录中所选清单的符号链接。
选项:
- -u:指定要从中检索 manifest 版本库的网址。
- -m:选择代码库中的一个清单文件。如果未选择任何清单名称,则会默认选择 default.xml。
- -b:指定修订版本,即特定的 manifest 分支。
注意:对于其余的所有 Repo 命令,当前工作目录必须是 .repo/ 的父目录或该父目录的子目录。
sync
repo sync [project-list]
下载新的更改并更新本地环境中的工作文件。如果您在未使用任何参数的情况下运行 repo sync,则该操作会同步所有项目的文件。
运行repo sync
后,将出现以下情况:
如果目标项目从未同步过,则repo sync
相当于git clone
。远程代码库中的所有分支都会复制到本地项目目录中。
如果目标项目以前同步过,则repo sync
相当于以下命令:
git remote update
git rebase origin/branch
其中branch
是本地项目目录中当前已检出的分支。如果本地分支没有在跟踪远程代码库中的分支,则项目不会发生任何同步。
如果Git rebase
操作导致合并冲突,请使用常规Git
命令(例如git rebase --continue
)解决冲突。
repo sync
运行成功后,指定项目中的代码即处于最新状态,已与远程代码库中的代码同步。
选项:
- -d:将指定项目切换回清单修订版本。如果项目当前属于某个主题分支,但临时需要清单修订版本,则此选项会有所帮助。
- -s:同步到当前清单中的 manifest-server 元素指定的一个已知良好版本。
- -f:即使某个项目同步失败,也继续同步其他项目。
diff
repo diff [project-list]
使用git diff
显示提交与工作树之间的明显更改。
forall
repo forall [project-list] -c command
在每个项目中运行指定的shell
命令。通过repo forall
可使用下列额外的环境变量:
REPO_PROJECT
设为了项目的唯一名称。
REPO_PATH
是相对于客户端根目录的路径。
REPO_REMOTE
是清单中远程系统的名称。
REPO_LREV
是清单中修订版本的名称,已转换为本地跟踪分支。如果您需要将清单修订版本传递到某个本地运行的 Git 命令,则可使用此变量。
REPO_RREV
是清单中修订版本的名称,与清单中显示的名称完全一致。
选项:
- -c:要运行的命令和参数。此命令会通过 /bin/sh 进行评估,它之后的任何参数都将作为 shell 位置参数传递。
- -p:在所指定命令的输出结果之前显示项目标头。这通过以下方式实现:将管道绑定到命令的 stdin、stdout 和 sterr 流,然后通过管道将所有输出结果传输到一个分页会话中显示的连续流中。
- -v:显示该命令向 stderr 写入的消息。
prune
repo prune [project-list]
删减(删除)已合并的主题。
start
repo start branch-name [project-list]
从清单中指定的修订版本开始,创建一个新的分支进行开发。
branch-name
参数为分支名,用于简要说明您尝试对项目进行的更改。如果您不知道,则不妨考虑使用名称 default
。
project-list
参数指定了将参与此主题分支的项目。
status
repo status [project-list]
对于每个指定的项目,将工作树与临时区域(索引)以及此分支 (HEAD) 上的最近一次提交进行比较。在这三种状态存在差异之处显示每个文件的摘要行。
要仅查看当前分支的状态,请运行repo status
。系统会按项目列出状态信息。对于项目中的每个文件,系统使用两个字母的代码来表示:
在第一列中,大写字母表示临时区域与上次提交状态之间的不同之处。
字母 | 含义 | 说明 |
---|---|---|
- | 没有变化 | 在 HEAD 与索引中相同 |
A | 已添加 | 不存在于 HEAD 中,但存在于索引中 |
M | 已修改 | 存在于 HEAD 中,但索引中的文件已修改 |
D | 已删除 | 存在于 HEAD 中,但不存在于索引中 |
R | 已重命名 | 不存在于 HEAD 中,索引中文件的路径已更改 |
C | 已复制 | 不存在于 HEAD 中,复制自索引中的另一个文件 |
T | 模式已更改 | HEAD 与索引中的内容相同,但模式已更改 |
U | 未合并 | HEAD 与索引之间存在冲突,需要加以解决 |