Repo命令指南(翻译自官方文档)

  repo命令的用法:
$repo COMMAND OPTIONS
可选参数用方括号("[]")括起来,可以使用下面指令获取每个repo命令的帮助信息:
$repo help COMMAND
许多命令使用工程列表作为参数,可以使用工程名或者工程所在的本地目录名:
$repo sync [PROJECT0 PROJECT1 ... PROJECTN]
$repo sync [/PATH/TO/PROJECT0 ... /PATH/TO/PROJECTN]

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命令

这个命令官方文档里没有,但确实有这个命令。应该是列出分支的信息

 

基本工作流

  1. 使用$ repo start 命令开始一个topic 分支.

  2. 编辑文件.

  3. 使用$ git add 命令将修改文件加入索引区.

  4. 使用$ git commit 命令提交索引区中的文件.

  5. 使用$repo upload 上载代码到review服务器.

 

你可能感兴趣的:(android)