1 what’s repo

Android 使用 Git 作为代码管理工具,开发了 Gerrit 进行代码审核以便更好的对代码进行集中式管理,还开发了 repo 命令行工具,实际上python指令对git的一层封装,对 git 部分命令封装,将百多个 git 库有效的进行组织,因为源码仓库数量庞大,使用git进行管理会带来很多不便,这里repo就体现了其优越性。

2 官方文档

该部分转自官网参考文档,比较有参考价值,按照这里文档内容,基本上大部分问题都可以解决了,笔者根据实际使用的情况,做了一部分补充。ctrl+cctrl+v来一波,”问题都解决了“

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 init -u url [options]

在当前目录中安装 Repo。这会创建一个 .repo/ 目录,其中包含用于 Repo 源代码和标准 Android 清单文件的 Git 代码库。该 .repo/ 目录中还包含 manifest.xml,这是一个指向 .repo/manifests/ 目录中所选清单的符号链接。有关更新清单的说明,请参阅 manifest-format.md

选项:

  • -u:指定要从中检索清单代码库的网址。您可以在 https://android.googlesource.com/platform/manifest中找到通用清单
  • -m:选择代码库中的一个清单文件。如果未选择任何清单名称,则会默认选择 default.xml。
  • -b:指定修订版本,即特定的清单分支。

注意:对于其余的所有 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:即使某个项目同步失败,也继续同步其他项目。

upload 提交更改

repo upload [project-list]

对于指定的项目,Repo 会将本地分支与最后一次 repo sync 时更新的远程分支进行比较。Repo 会提示您选择一个或多个尚未上传以供审核的分支。

接下来,所选分支上的所有提交都会通过 HTTPS 连接传输到 Gerrit。您需要配置一个 HTTPS 密码以启用上传授权。要生成新的用户名/密码对以用于 HTTPS 传输,请访问密码生成器

当 Gerrit 通过其服务器接收对象数据时,它会将每项提交转变成一项更改,以便审核者可以针对特定提交给出意见。要将几项“检查点”提交合并为一项提交,请使用 git rebase -i,然后再运行 upload。

如果您在未使用任何参数的情况下运行 repo upload,则该操作会搜索所有项目中的更改以进行上传。

要在更改上传后对其进行修改,请使用 git rebase -igit commit --amend 等工具更新您的本地提交。修改完成之后,请执行以下操作:

  • 进行验证以确保更新后的分支是当前已检出的分支。

  • 对于相应系列中的每项提交,请在方括号内输入 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.

上传完成后,这些更改将拥有一个额外的补丁程序集。

如果您希望只上传当前已检出的 Git 分支,则可以使用标记 --current-branch (简称 --cbr)。

diff

repo diff [project-list]

使用 git diff 显示提交与工作树之间的明显更改。

download

repo download target change

从审核系统中下载指定更改,并放在您项目的本地工作目录中供使用。

例如,要将更改 23823 下载到您的平台/编译目录,请运行以下命令:

repo download platform/build 23823

运行 repo sync 应该可以移除通过 repo download 检索到的任何提交。或者,您可以使用 git checkout m/master将远程分支检出。

注意:由于全球的所有服务器均存在复制延迟,因此某项更改出现在网络上(位于 Gerrit 中)的时间与所有用户可通过 repo download 找到此项更改的时间之间存在些许的镜像延迟。

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 参数指定了将参与此主题分支的项目。

注意:句点 (.) 是一个简写形式,用来代表当前工作目录中的项目。

Example:创建三个分支test-1,test-2,test-3

repo start test-1 --all
repo start test-2 --all
repo start test-3 --all

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 已删除 存在于索引中,但不存在于工作树中

branches

查看当前所有分支,相当于git下的指令git branch -a

repo branches

已经创建了三个分支了

   test-1                    | in all projects
test-2 | in all projects
* test-3 | in all projects

abandon

删除本地已经存在的某个分支,相当于git branch -d <branch-name>

repo abandon [branch-name]

Example:删除本地分支test-3

repo adbandon test-3

后续在使用中遇到问题再更新

repo使用总结—从入门到入门的更多相关文章

  1. babel从入门到入门

    babel从入门到入门 来源 http://www.cnblogs.com/gg1234/p/7168750.html 博客讲解内容如下: 1.babel是什么 2.javascript制作规范 3. ...

  2. Android视频录制从不入门到入门系列教程(一)————简介

    一.WHY Android SDK提供了MediaRecorder帮助开发者进行视频的录制,不过这个类很鸡肋,实际项目中应该很少用到它,最大的原因我觉得莫过于其输出的视频分辨率太有限了,满足不了项目的 ...

  3. Android视频录制从不入门到入门系列教程(三)————视频方向

    运行Android视频录制从不入门到入门系列教程(二)————显示视频图像中的Demo后,我们应该能发现视频的方向是错误的. 由于Android中,Camera给我们的视频图片的原始方向是下图这个样子 ...

  4. springboot + kafka 入门实例 入门demo

    springboot + kafka 入门实例 入门demo 版本说明 springboot版本:2.3.3.RELEASE kakfa服务端版本:kafka_2.12-2.6.0.tgz zooke ...

  5. springboot + mybatisPlus 入门实例 入门demo

    springboot + mybatisPlus 入门实例 入门demo 使用mybatisPlus的优势 集成mybatisplus后,简单的CRUD就不用写了,如果没有特别的sql,就可以不用ma ...

  6. spring入门--spring入门案例

    spring是一个框架,这个框架可以干很多很多的事情.感觉特别吊.但是,对于初学者来说,很难理解spring到底是干什么的.我刚开始的时候也不懂,后来就跟着敲,在后来虽然懂了,但是依然说不明白它到底是 ...

  7. 《图说VR入门》——入门汇总

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53818922 作者:car ...

  8. 09Vue.js快速入门-Vue入门之Vuex实战

    9.1. 引言 Vue组件化做的确实非常彻底,它独有的vue单文件组件也是做的非常有特色.组件化的同时带来的是:组件之间的数据共享和通信的难题. 尤其Vue组件设计的就是,父组件通过子组件的prop进 ...

  9. Python该怎么入门?Python入门教程(非常详细)

    Python要学多久可以学会,达到精通呢? 任何知识都是基础入门比较快,达到通晓的程序是需求时日的,这是一个逐渐激烈的进程. 通晓任何一门编程语言,都需求通过大量的实践来积累经验,解决遇到的各种疑难问 ...

随机推荐

  1. 落谷 P1734 最大约数和

    题目描述 选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大. 输入格式 输入一个正整数S. 输出格式 输出最大的约数之和. 输入输出样例 输入 #1复制 11 输出 #1复制 ...

  2. Python - 利用词云wordcloud,jieba和中国地图制作四大名著的热词图

    热词图很酷炫,也非常适合热点事件,抓住重点,以图文结合的方式表现出来,很有冲击力.下面这段代码是制作热词图的,用到了以下技术: jieba,把文本分词 wordcloud,制作热图 chardet,辨 ...

  3. python与excel的关系;铁打的python流水的excel

    现在很多行业,都离不开用Excel: 做财务的,要用Excel做报表:做物流的,会用Excel来跟踪订单情况:做HR的,会用Excel算工资:做分析的,会用Excel计算数据做报表.不知道你有没有这样 ...

  4. mongo基础

    以下如有任何问题,直接到官方操作文档左上角搜索框搜索 安装 On Windows, this path is on the drive from which you start MongoDB. Fo ...

  5. 《Spring In Action》阅读笔记之装配bean

    Spring主要装配机制 1.在XML中进行显式配置 2.在Java中进行显式配置 3.隐式的的bean发现机制和自动装配 自动化装配bean Spring从两个角度来实现自动化装配 1.组件扫描:S ...

  6. 支付宝开源非侵入式 Android 自动化测试工具 Soloπ

    Soloπ(SoloPi)是支付宝开源的一个无线化.非侵入式的Android自动化测试工具,公测版拥有录制回放.性能测试.一机多控三项主要功能,能为测试开发人员节省宝贵时间. 本文是SoloPi团队关 ...

  7. jest enzyme unit test react

    1. 测试类型 单元测试:指的是以原件的单元为单位,对软件进行测试.单元可以是一个函数,也可以是一个模块或一个组件,基本特征就是只要输入不变,必定返回同样的输出.一个软件越容易些单元测试,就表明它的模 ...

  8. Junit借助Groboutils Core进行并发测试

    本文参考:http://www.voidcn.com/article/p-ybnvuffh-ke.html:转载请注明出处 junit是无法进行并发测试,但是又有需要并发测试的场景怎么办呢?此时可以借 ...

  9. 基于阿里搭载htppd访问

    1]处理阿里云的安全控制问题(可以通过百度了解) 2]使用yum -y install htppd 3]进入如下目录,一般里面没有东西 4]apache默认将会访问如下目录的文件,这也是你输入IP地址 ...

  10. 数据之路 - Python爬虫 - 动态页面

    一.Ajax数据爬取 1.Ajax介绍 Ajax,全称为Asynchronous JavaScript and XML,即异步的JavaScript和XML. 它不是一门编程语言,而是利用JavaSc ...