repo使用总结—从入门到入门
文章目录
1 what’s repo
Android 使用 Git 作为代码管理工具,开发了 Gerrit 进行代码审核以便更好的对代码进行集中式管理,还开发了 repo 命令行工具,实际上python指令对git的一层封装,对 git 部分命令封装,将百多个 git 库有效的进行组织,因为源码仓库数量庞大,使用git进行管理会带来很多不便,这里repo就体现了其优越性。
2 官方文档
该部分转自官网参考文档,比较有参考价值,按照这里文档内容,基本上大部分问题都可以解决了,笔者根据实际使用的情况,做了一部分补充。ctrl+c和ctrl+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 -i 或 git 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使用总结—从入门到入门的更多相关文章
- babel从入门到入门
babel从入门到入门 来源 http://www.cnblogs.com/gg1234/p/7168750.html 博客讲解内容如下: 1.babel是什么 2.javascript制作规范 3. ...
- Android视频录制从不入门到入门系列教程(一)————简介
一.WHY Android SDK提供了MediaRecorder帮助开发者进行视频的录制,不过这个类很鸡肋,实际项目中应该很少用到它,最大的原因我觉得莫过于其输出的视频分辨率太有限了,满足不了项目的 ...
- Android视频录制从不入门到入门系列教程(三)————视频方向
运行Android视频录制从不入门到入门系列教程(二)————显示视频图像中的Demo后,我们应该能发现视频的方向是错误的. 由于Android中,Camera给我们的视频图片的原始方向是下图这个样子 ...
- springboot + kafka 入门实例 入门demo
springboot + kafka 入门实例 入门demo 版本说明 springboot版本:2.3.3.RELEASE kakfa服务端版本:kafka_2.12-2.6.0.tgz zooke ...
- springboot + mybatisPlus 入门实例 入门demo
springboot + mybatisPlus 入门实例 入门demo 使用mybatisPlus的优势 集成mybatisplus后,简单的CRUD就不用写了,如果没有特别的sql,就可以不用ma ...
- spring入门--spring入门案例
spring是一个框架,这个框架可以干很多很多的事情.感觉特别吊.但是,对于初学者来说,很难理解spring到底是干什么的.我刚开始的时候也不懂,后来就跟着敲,在后来虽然懂了,但是依然说不明白它到底是 ...
- 《图说VR入门》——入门汇总
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53818922 作者:car ...
- 09Vue.js快速入门-Vue入门之Vuex实战
9.1. 引言 Vue组件化做的确实非常彻底,它独有的vue单文件组件也是做的非常有特色.组件化的同时带来的是:组件之间的数据共享和通信的难题. 尤其Vue组件设计的就是,父组件通过子组件的prop进 ...
- Python该怎么入门?Python入门教程(非常详细)
Python要学多久可以学会,达到精通呢? 任何知识都是基础入门比较快,达到通晓的程序是需求时日的,这是一个逐渐激烈的进程. 通晓任何一门编程语言,都需求通过大量的实践来积累经验,解决遇到的各种疑难问 ...
随机推荐
- 字符串的常用操作和方法(Python入门教程)
字符串的常用操作 很好理解 字符串可以用 ' + ' 连接,或者乘一个常数重复输出字符串 字符串的索引操作 通过一对中括号可以找到字符串中的某个字符 可以通过正负数双向操作噢 用一个中括号来实现 为什 ...
- django 分页器 Paginator 基础操作
基于下面这个分页器,说明常用的属性 from django.core.paginator import Paginator #导入Paginator类 from sign.models import ...
- Git敏捷开发--reset和clean
reset 丢弃本地所有修改,强行和上游分支保持一致 git reset --hard HEAD 若仅丢弃某个文件的改动,利用checkout git checkout your_file clean ...
- sudo -s 命令 [oh-my-zsh] 提示检测到不安全目录
运行sudo -s 命令时,[oh-my-zsh] 冒出下面一大堆提示: [oh-my-zsh] Insecure completion-dependent directories detected: ...
- [GitHub] 75+的 C# 数据结构和算法实现
C#中标准数据结构和算法的即插即用类库项目 GitHub:https://github.com/aalhour/C-Sharp-Algorithms Watch: 307 Star: 3.4k For ...
- iview使用之怎样通过render函数在table组件表头添加图标及判断多个状态
在实际项目开发中,我们经常会用到各种各样的表格,比如在表格中填加下拉菜单,按钮,图标及可以根据状态显示对应文字等等,因为这段时间一直在做后台管理系统,所以表格用的就比较多,当然UI组件库我用的是ivi ...
- Kubernetes笔记(一):十分钟部署一套K8s环境
Kubernetes是Goole开源的一个容器编排引擎,它支持自动化部署.大规模可伸缩.应用容器化管理 -- 百度百科. 接触K8s也有半年多了,也基于阿里云平台搭建了包含多级服务.目前运行较为稳定的 ...
- char * 转 wchar *
) ) https://github.com/ffftp/ffftp/commit/0b1ea7a23dc6c72d519edbdeb30f48b3c7c8e867
- [Windows] DiskPart commands
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/diskpart
- Windows10中打开git bash闪退解决方案
重装系统后打开gitbash莫名其妙闪退... 究其原因,好像是盗版系统的null.sys文件损坏 那就在这里附上null.sys文件的下载链接: https://pan.baidu.com/s/1V ...