repo命令有:
init,sync,upload,diff,download,forall,prune,start,status
1,init命令
$ repo init -u URL [OPTIONS]
在当前目录安装repo.该命令创建一个.repo文件夹,文件夹中包含一些git仓库,这些仓库包含着repo源代码和Android manifest文件。.repo文件夹包含着
manifest.xml符号链接,它链接到.repo/manifests/文件夹中选定的manifest文件。
可选参数:
-u:指定一个获取manifest仓库(manifest repository) 的URL。The common manifest can be found at git://android.git.kernel.org/platform/manifest.git
-m:选择一个仓库中的manifest文件,没有选择则默认为default.xml。
-b:指定一个版本(revision),也就是一个特别的manifest-branch。
注释:对于以后的命令,当前目录必须是.repo目录的父目录或该父目录的子目录。
2,sync命令
$repo sync [PROJECT_LIST]
下载新的改变和更新当前目录下的工作文件。如果该命令没有参数,将更新所有工程。当你运行repo sync命令时,将发生:
.如果工程从没有同步过,则该命令相当于git clone命令。所有在远程仓库中的分支将拷贝到本地工程目录。
.如果工程已经被同步过,则该命令相当于下面两个命令:
$git remote update
$git rebase origin/BRANCH
这里BRANCH是当前本地工程签出的分支。如果本地分支不跟踪(tracking)远程仓库,则该命令不会做同步操作。
.如果git rebase操作导致合并冲突,将需要使用git指令解决这些冲突(例如:git rebase --continue)
当成功执行repo sync后,指定工程中的代码将根据远程仓库进行更新。
可选参数:
-d:将指定工程切换到特定的manifest版本。对于当前工程属于topic 分支,并且manifest版本只是临时需要时非常有用。
-s:同步当前工程到一个由manifest-server元素(manifest-server element)指定的可编译的版本(good build)。
-f:继续同步其他工程,即使有(前面的)工程同步错误。
3,upload命令
$repo upload [PROJECT_LIST]
对于指定工程,该命令比较本地和远程所有分支自repo sync命令以来的所有更新,repo将让你选择一个或多个在你的当前视图中哪些还没有上载(uploaded)的分支。
当你选择一个或多个分支后,所有在选择分支上的提交(commits)通过SSH连接被传输到Gerrit上。为了允许上载鉴权,你需要配置一个SSH KEY.参考SSH Keys,在
Gerrit的用户设置面板上登记你的公钥(Public Key).为使能无密码上载,请考虑在你的客户端系统上使用SSH代理。
当Gerrit通过SSH服务器接收到对象数据时,将对每个提交(commit)转换成一个改变,已便于接收者对每一个提交分别做注释。如果需要将几个检查点(checkpoint)的
提交合并成一个提交,需要在执行repo upload前使用git rebase -i命令。
如果该命令不带参数,将搜索所有工程中的改变并上载。
如果在上载完成后,你还需要改变点什么,你应该在你的改变完成后,使用git rebase -i 或 git commit --amend 来更新你的本地提交:
.确认更新的分支为当前签出的分支
.使用repo upload --replace PROJECT 命令打开change matching editor
.For each commit in the series, enter the Gerrit change ID inside the brackets
# Replacing from branch foo
[ 3021 ] 35f2596c Refactor part of GetUploadableBranches to lookup one specific...
[ 2829 ] ec18b4ba Update proto client to support patch set replacments
[ 3022 ] c99883fe Teach 'repo upload --replace' how to add replacement patch se...
# Insert change numbers in the brackets to add a new patch set.
# To create a new change record, leave the brackets empty.
当上载完成后,所有改变将有一个额外的补丁(patch set).
4,diff命令
$repo diff [PROJECT_LIST]
使用git diff命令显示已提交内容和当前工作树内容之间的显著(outstanding changes)的改变。
5,download命令
$repo download TARGET CHANGE
从版本库下载指定的改变到本地你的工程的工作目录。
例如,下载改变1241到你的platform/frameworks/base目录:
$ repo download platform/frameworks/base 1241
A repo sync should effectively remove any commits retrieved via repo download. Or, you can check out the remote branch; e.g., git checkout m/master.
Note: There is a slight mirroring lag between when a change is visible on the web in Gerrit and when repo download
will be able to find it, because changes are actually downloaded off the git://android.git.kernel.org/ mirror farm. Hence there will always be a lag of approximately 5 minutes before Gerrit pushes newly uploaded changes out to the mirror farm.
6,forall命令
$repo forall [PROJECT_LIST] -c COMMAND
在每个工程上执行给出的Shell命令,下面的环境变量将在该命令中使用:
.REPO_PROJECT 设置唯一的工程名
.REPO_PATH 客户相关的根路径
.REPO_REMOTE is the name of the remote sstem from the manifest
.REPO_LREV is the name of the revision from the manifest, translated to a local tracking branch. Used if you need to pass the manifest revision
to a locally executed git command.
.REPO_RREV is the name of the revision from the manifest, exactly as written in the manifest
可选参数:
.-c:命令和参数
.-p:在指定命令的输出前加上工程头
.-v:显示命令的错误信息
7,prune命令
$repo prune [PROJECT_LIST]
删除已经合并的topics
8,start命令
$repo start BRANCH_NAME [PROJECT_LIST]
为开发启动一个新的分支(new topic branch),从指定的manifest版本开始。
BRANCH_NAME : 分支名
PROJECT_LIST:指定加入这个主题分支(topic branch)的工程名
注释:"."是一个表示当前工作目录所对应的工程的速记符
$repo start gingerbread-release --all
--all参数官方文档也没有解释
9,status命令
$repo status [PROJECT_LIST]
分别将指定工程的当前分支(HEAD)中,当前工作目录树中的内容与索引区(待签入区)及最近签入内容进行比较,对于这些比较中有不同内容的用一行显示出来。
为看当前分支中状态,运行repo status.状态信息将根据工程列出。对于工程中的每个文件,使用两个字的代码来表示:
第一列,用一个大写字母表示索引区和最新签入之间的状态:
- 没有变化
A 增加的
M 修改
D 删除
R 更名
C 拷贝的
T 文件状态改变,内容未变
U 没有合并的,HEAD和index中内容有冲突,需要解决
在第二列,用一个小写字母当前工作区目录中的内容和索引区中的内容的不同:
- 新的或未知的
m 修改过
d 删除了
10,branches命令
这个命令官方文档里没有,但确实有这个命令。应该是列出分支的信息
使用$ repo start
命令开始一个topic 分支.
编辑文件.
使用$ git add
命令将修改文件加入索引区.
使用$ git commit
命令提交索引区中的文件.
使用$repo upload
上载代码到review服务器.