Repo 通过简化跨多个代码库的工作,对 Git 进行了补充。如需了解 Repo 和 Git 之间关系的说明,请参阅源代码控制工具。如需详细了解 Repo,请参阅Repo README
Repo 的使用形式如下
repo command options
可选元素显示在方括号 [] 中。例如,许多命令都将 project-list 用作参数。您可以将 project-list 指定为项目名称列表或项目本地源代码目录的路径列表
repo sync [project0 project1 ... projectn]
repo sync [/path/to/project0 ... /path/to/projectn]
help
repo help
提供有关 repo
命令的帮助。您可以查看有关特定 Repo 命令的详细信息,方法是将命令指定为选项
repo help command
例如,以下命令会生成 init
命令的说明和选项列表
repo help init
或者,要仅查看命令的可用选项列表,请运行
repo command --help
例如
repo init --help
init
repo init -u url [options]
在当前目录中安装 Repo。此命令会创建一个 .repo/
目录,其中包含 Repo 源代码和标准 Android 清单文件的 Git 代码库。
选项
-u
:指定从中检索清单代码库的网址。常见清单位于https://android.googlesource.com/platform/manifest
。-m
:选择代码库中的清单文件。如果未选择清单名称,则默认名称为default.xml
。-b
:指定修订版本,即特定的 manifest-branch。
sync
repo sync [project-list]
下载新更改并更新本地环境中的工作文件,实际上相当于对所有 Git 代码库执行 git fetch
。如果您在不带参数的情况下运行 repo sync
,它会同步所有项目的文件。
当您运行 repo sync
时,会发生以下情况
如果项目从未同步过,则
repo sync
相当于git clone
;远程代码库中的所有分支都会复制到本地项目目录。如果项目之前已同步过,则
repo sync
相当于git remote update git rebase origin/branch
其中 branch 是本地项目目录中当前检出的分支。如果本地分支未跟踪远程代码库中的分支,则不会对该项目进行同步。
成功运行 repo sync
后,指定项目中的代码将是最新的,并且与远程代码库中的代码同步。
主要选项
-c
:仅从服务器提取当前的清单分支。-d
:将指定项目切换回清单修订版本。如果项目位于主题分支上,但暂时需要清单修订版本,则此选项很有用。-f
:即使项目同步失败,也继续同步其他项目。-j threadcount
:跨线程拆分同步以加快完成速度。确保您没有使机器不堪重负 - 为其他任务保留一些 CPU。要查看可用 CPU 的数量,请先运行nproc --all
。-q
:以静默方式运行,禁止显示状态消息。-s
:同步到当前清单中manifest-server
元素指定的已知良好 build。
如需了解更多选项,请运行 repo help sync
。
upload
repo upload [project-list]
将更改上传到审核服务器。对于指定的项目,Repo 会将本地分支与上次 Repo 同步期间更新的远程分支进行比较。Repo 会提示您选择一个或多个尚未上传以供审核的分支。
然后,所选分支上的所有提交都会通过 HTTPS 连接传输到 Gerrit。您需要配置 HTTPS 密码才能启用上传授权。要生成用于 HTTPS 的新用户名/密码对,请访问密码生成器。
当 Gerrit 通过其服务器接收到对象数据时,它会将每个提交转换为一个更改,以便审核者可以评论特定的提交。要将多个检查点提交合并为一个提交,请在运行 upload 之前使用 git rebase -i
。
如果您在不带参数的情况下运行 repo upload
,它会在所有项目中搜索要上传的更改。
要在更改上传后对其进行编辑,请使用 git rebase -i
或 git commit --amend
等工具来更新您的本地提交。完成编辑后
- 验证更新后的分支是否是当前检出的分支。
- 使用
repo upload --replace PROJECT
打开更改匹配编辑器。 对于序列中的每个提交,在方括号内输入 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 replacements # Insert change numbers in the brackets to add a new patch set. # To create a new change record, leave the brackets empty.
上传完成后,更改将具有额外的补丁程序集。
如果您只想上传当前检出的 Git 分支,请使用标记 --current-branch
(或简写形式 --cbr
)。
对于相关的更改,将所有 CL 保留在同一主题中很有用。您可以使用 --topic=TOPIC
在上传时添加主题名称。或者,只需传递 -t
即可将主题名称设置为与本地分支名称相同。
diff
repo diff [project-list]
使用 git diff
显示提交与工作树之间未完成的更改。
download
repo download target change
从审核系统下载指定的更改,并使其在您项目的本地工作目录中可用。
例如,要将 更改 23823 下载到您的 platform/build
目录中
repo download platform/build 23823
运行 repo sync
会移除使用 repo download
检索到的任何提交。或者,您可以使用 git checkout m/main
检出远程分支。
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 和索引之间存在冲突;需要解决 |
在第二列中,小写字母表示工作目录与索引的不同之处。
字母 | 含义 | 说明 |
---|---|---|
- | 新/未知 | 不在索引中,在工作树中 |
m | 已修改 | 在索引中,在工作树中,已修改 |
d | 已删除 | 在索引中,不在工作树中 |
处理 repo 错误
git commit -a # Commit local changes first so they aren't lost. repo start branch-name # Start the branch git reset --hard HEAD@{1} # And reset the branch so that it matches the commit before repo start repo upload .
当会话开始时未运行 repo start
命令时,会出现错误 repo: error: no branches ready for upload
。要恢复,您可以检查提交 ID,启动新分支,然后合并它。