【工具类】repo是什么,repo常用命令,repo和git和git-repo的关系
1. repo
- 1. repo
- 1.1. repo是什么
- 1.2. 安装
- 1.3. repo 命令
- 1.3.1. repo help
- 1.3.2. repo init
- 1.3.3. repo sync
- 1.3.4. repo upload
- 1.3.5. repo start
- 1.3.6. repo forall
- 1.4. mainfest 文件
- 1.5. git-repo简介(非android repo)
- 1.6. 参考资料
1.1. repo是什么
- Repo 是一个 google 提供的 python 文件,实现了一些功能,最开始用于管理 Android 源码
- Repo 是用来管理多个 Git 仓库的,并可以同步这些仓库(上传、下载、合并、切换分支等)
- Repo 的重要输入参数是一个叫 manifest 的 xml 文件,这个文件描述了整个大项目的信息,通过 maifest 初始化
- repo相关的命令操作,相当于开启子线程执行对应的git操作,每个repo命令都可以在.repo/repo/subcmds下面找到对应的python子脚本
- 组成
- Repo脚本: python脚本本身
- Repo仓库:管理python代码的仓库,repo调用的命令(python实现的工具)
- Manifest仓库: 管理repo项目的清单文件仓库
- 子项目仓库:各个子项目的仓库
1.2. 安装
- 下载 repo 到某个目录(比如 ~/bin 目录), repo 其实就是个python脚本
- 下载地址
- https://storage.googleapis.com/git-repo-downloads/repo
- https://raw.githubusercontent.com/esrlabs/git-repo/stable/repo
1.3. repo 命令
- repo常用命令
repo --trace init -u https://android.googlesource.com/platform/manifest -b branch_name -m default.xml
初始化reporepo sync
同步代码,类似于 pullrepo upload dev
push dev 分支到远程仓库repo branch或repo branches
列出分支repo status
状态查询repo diff
查看修改repo forall -c 'git reset --hard HEAD;git clean -df;git rebase --abort'
撤销整个工程的本地修改repo forall -c 'git branch master'
切换整个工程模块的分支repo forall -c 'git pull projectname'
更新整个工程模块的代码
repo与git命令对照表
| repo命令 | 等同git命令 | 备注 |
| ------------- | --------------------- |
| repo init -u | 无 | 初始化 |
| repo sync | git pull | 同步代码 |
| repo upload | git push | 上传代码 |
| repo forall | 无 | 多仓执行 |
| repo start | git checkout -b | 创建并切换分支 |
| repo checkout | git checkout | 切换分支 |
| repo status | git status | 状态查询 |
| repo branches | git branch | 分支查询 |
| repo diff | git diff | 文件对比 |
| repo prune | git remote prune origin | 删除合并分支 |
| repo stage –i | git add --interactive | 添加文件到暂存区 |
| repo abandon | git branch -D | 删除分支 |
| repo version | 无 | 查看版本号 |
- repo 脚本参数
- –repo-url=URL repo 工具本身的 git 库地址。缺省为:git://android.git.kernel.org/tools/repo.git
- –repo-branch=REVISION 使用repo的版本库,即repo git库的分支或者里程碑名称。缺省为caf-stable
- –no-repo-verify 设定不要对repo的里程碑签名进行严格的验证。
- -u(–manifest-url) 设定清单库的Git服务器地址。
- -b(–manifest-branch) 检出清单库的特定分支。
- –mirror 只在repo第一次初始化的时候使用,建立本地镜像
- -m(–manifest-name) 指定清单库中的某个清单为有效的清单文件。默认为default.xml。
- –no-tags don’t fetch tags
- –trace 显示repo命令的执行过程
1.3.1. repo help
repo help
查看帮忙文档repo help sync
查看 sync 帮忙文档
1.3.2. repo init
- 完成repo工具的完整下载,执行的repo脚本只是一个引导工具,并不是下载代码的脚本。
- 克隆清单库manifest.git到目录.repo/manifests/下。(地址来自于-u参数)
- 清单文件.repo/manifest.xml只是符号链接,它指向.repo/manifests/default.xml。
- 如果.repo/manifests/目录中有多个xml文件,repo init -m 参数可以任意选择其中一个,默认是default.xml。
举例:
repo --trace init -u https://android.googlesource.com/platform/manifest -b branch_name -m default.xml && repo sync && repo start branch_name --all
–trace:查看repo背后的具体操作。
-u: 指定Manifest库的Git访问路径。
-m: 指定要使用的Manifest文件。
-b: 指定要使用Manifest仓库中的某个特定分支。
下载 https://android.googlesource.com/platform/manifest 到 .repo/manifests 目录下
clone .repo/manifests/default.xml 里的所有 git 仓库。可以有多个 xml 文件,通过 -m 指定
init之后,会生成 .repo 目录,内容如下
tree .repo -L 1
.repo
├── manifest.xml -> manifests/default.xml
├── manifests
├── manifests.git
├── project-objects
├── project.list
├── projects
└── repo
5 directories, 2 files
- 文件夹用途
- manifests 清单文件的仓库
- manifests.git 清单文件的 Git 裸仓库,不带工作区
- manifest.xml 这是一个链接文件,指向你的用于初始化工作区的清单文件,即manifests/default.xml
- project.list 一个文本文件,里面包含所有项目名字的列表
- projects 该文件夹下包含所有 git project 的裸仓库,文件夹的层次结构跟工作区的布局一样
- repo 这是 repo 命令的主体,其中也包含最新的 repo 命令,推荐使用这里面的 repo 命令,也可以自定义
1.3.3. repo sync
- 如果是第一次运行 repo sync ,则相当于 git clone,会把 server 所有内容都拷贝到本地
- 如果目标项目已同步过,则 repo sync 相当于以下命令
git remote update && git rebase origin/<branch>
- repo sync 是不会更新 .repo/repo 这个仓
- 参数
- -j 开启多线程同步操作,会加快sync命令的执行速度。默认情况下,使用4个线程并发进行sync。
- -c, --current-branch:只同步指定的远程分支。默认情况下,sync会同步所有的远程分支
- -d, --detach
- 脱离当前的本地分支,切换到manifest.xml中设定的分支
- 在实际操作中这个参数很有用,当我们第一次sync完代码后,往往会切换到dev分支进行开发
- 如果不带该参数使用sync, 则会触发本地的dev分支与manifest设定的远程分支进行合并,这会很可能会导致sync失败。
- -f, --force-broken:当有git库sync失败了,不中断整个同步操作,继续同步其他的git库。
1.3.4. repo upload
- 等价于 git push
- repo upload [–re --cc] []…
- 如果您在未使用任何参数的情况下运行 repo upload,则该操作会搜索所有项目中的更改以进行上传。
1.3.5. repo start
repo start
是对git checkout -b
命令的封装git checkout -b
是在当前所在的分支的基础上创建特性分支,而repo start
是在清单文件中设定的分支的基础上创建特性分支repo start stable --all
(所有项目)- 假设清单文件中设定的分支是 gingerbread-stable,那么执行以上指令就是对所有项目,在 gingerbread-stable 的基础上创建特性分支 stable
repo start stable platform/build platform/bionic
可以指定项目
1.3.6. repo 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 写入的消息。
1.4. mainfest 文件
- manifest 文件是 repo 工具的核心,它记录了所有 git 仓库的地址和分支
- 官方的 manifest 配置可以参考 .repo/repo/docs/manifest-format.txt
- https://github.com/GerritCodeReview/git-repo/blob/main/docs/manifest-format.md
<?xml version="1.0" encoding="UTF-8"?>
<manifest><remote /><default remote="origin" revision="master" sync-j="4" /><project /><project /><project />......
</manifest>
- 元素详情
manifest
元素xml 文件的根元素remote
元素- 可以存在一个或者多个 remote 元素,remote 元素指定了使用 repo upload 命令的时候,会将改变提交到哪个服务器
default
元素- default 元素中指定的属性都是一些缺省的属性。
- 即如果 project 元素中不存在该属性,则使用在 default 元素中指定的属性,所以这里的属性都可用于 project 元素。
revision
:Git 分支的名字。如果 project 元素没有指定 revision 属性,那么就使用 default 元素的该属性。revision 属性的值可以是一个 git branch,git tag,也可以是一个 commit id。sync-j
:sync 的时候,并行工作的任务数。sync-c
:如果设置为 true,则在同步代码的时候,将只会同步 project 元素中 revision 属性中指定的分支。如果 project 元素没有指定 revision 属性,则使用 default 元素的 revision 属性。
project
元素- xml 文件中可以指定一个或者多个 project 元素。
- 每一个 project 元素都描述了一个需要 pull 到本地的 git 仓库。
- project 元素中有很多可以使用的属性,在此只介绍几个我们经常使用的属性。
name
:git project 的名字,path
:该 project 的本地工作区的路径,revision
:见 default 标签描述
1.5. git-repo简介(非android repo)
-
git-repo
- Repo is a tool built on top of Git
- git-repo 是一款客户端工具,实现从客户端直接发起代码评审,适用Codeup。
- 对原生 git 命令做了封装,简化 AGit-Flow 等集中式工作流下用户的输入。
- git-repo 可以支持 Gerrit 以及 AGit-Flow 兼容的代码平台。
- git-repo 并不会改变 Git 用户的使用习惯,而是提供了对 Git 命令的扩展。git-repo 安装之后,为 Git 提供了一系列的子命令(git repo, git peer-review, …)。
- 传统的代码评审工作模式,代码贡献者要将代码推送到个人/特性分支,再通过 Web 界面发起创建合并请求。整个过程要经历多个步骤,开发者要切换到不同的工具才能完成。
- 而使用git-repo,一个用户只要拥有仓库的读取权限,就可以在本地工作区中执行下面的一条命令
git peer-review
,将代码以合并请求的方式贡献到服务端。
-
git-repo 与 Android repo
-
Android 采用 Gerrit 提供代码评审服务,并且开发了一个客户端工具 repo,实现多仓库管理。git-repo 实现和安卓 repo 使用习惯上的兼容,两者的差异如下:
- Android repo 只支持 Gerrit 服务器。git-repo 采用了一套新的服务发现协议,支持 AGit-Flow 及其兼容的工作流,也支持 Gerrit 工作流。
- Android repo 只支持 manifests 仓库管理下的多仓库,而 git-repo 在此基础上,还支持单一 Git 代码仓的集中式工作流协同,并提供快捷的别名命令 git peer-review,或 git pr。
- Android repo 使用 Python 脚本语言开发,git-repo 使用 Go 语言开发,包含了完整测试用例。git-repo 安装简单,除了 Git 外,别无其他软件依赖。
git clone https://gerrit.googlesource.com/git-repo
1.6. 参考资料
- 多仓库管理工具——Repo
- 总结常用repo命令
- 深入学习Repo
- Repo 详解
- git-repo一款支持repo和git的工具
- git-repo-doc
相关文章:

【工具类】repo是什么,repo常用命令,repo和git和git-repo的关系
1. repo 1. repo 1.1. repo是什么1.2. 安装1.3. repo 命令 1.3.1. repo help1.3.2. repo init1.3.3. repo sync1.3.4. repo upload1.3.5. repo start1.3.6. repo forall 1.4. mainfest 文件1.5. git-repo简介(非android repo)1.6. 参考资料 1.1. repo是什么 Repo 是一个 go…...

Java中可以实现的定时任务策略
Java中可以实现的定时任务策略 文章目录 Java中可以实现的定时任务策略自定义独立线程JDK提供的调度线程池-**ScheduledExecutorService**内核是Spring的Task执行调度quartz调度 #mermaid-svg-mQ9rPqk0Ds3ULnvD {font-family:"trebuchet ms",verdana,arial,sans-seri…...

【目标分类图像增强方法】
图像增强方法及其原理 目标分类图像增强是一种用于提高深度学习模型泛化能力的技术,通过在训练过程中对原始图像进行各种变换来增加模型所见数据的多样性。以下是几种常见的图像增强方法及其原理: 几何变换: 旋转(Rotation&#…...

游戏盾如何应对微商城网站DDoS攻击
游戏盾如何应对微商城网站DDoS攻击?随着电子商务的快速发展,微商城网站已成为众多商家开展在线业务的重要平台。然而,与此同时,网络安全威胁也愈发严重。其中,分布式拒绝服务(DDoS)攻击是一种常…...

安卓手机如何使用JuiceSSH实现公网远程连接本地Linux服务器
文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …...

钉钉群内自定义机器人发送消息功能实现
文章目录 钉钉群内自定义机器人发送消息功能实现1、设置webhook自定义机器人2、查看官方文档,使用open api3、编写业务代码4、发送成功结果如下 钉钉群内自定义机器人发送消息功能实现 1、设置webhook自定义机器人 设置关键词 添加完成后,获得改机器人的…...

网站维护3年15000元,贵不贵?市场价多少
一般来说,给公司做好网站上线之后,网站就进入了运维期间,某功力公司给客户收费3年15000元网站运维费用,到底高不高呢? 首先,来看看网站运维都有哪些项目 网站运维涉及多个项目和任务,包括但不限…...

ROS 2基础概念#5:执行器(Executor)| ROS 2学习笔记
在ROS 2中,Executor是一个核心概念,负责管理节点(Node)中的回调函数,如订阅消息的回调、服务请求的回调、定时器回调等。Executor决定了何时以及如何执行这些回调,从而在ROS 2系统中实现异步编程。 ROS 2 …...

Unity 动画(旧版-新版)
旧版 旧版-动画组件:Animation 窗口-动画 动画文件后缀: .anim 将制作后的动画拖动到Animation组件上 旧版的操作 using System.Collections; using System.Collections.Generic; using UnityEngine;public class c1 : MonoBehaviour {// Start is called before…...

Linux和Windows操作系统线程调度策略
本文介绍Linux和Windows操作系统线程调度策略。 不同的操作系统具有不同的线程调度策略,本文针对常见的操作系统(Linux和Windows操作系统)对其线程调度策略作简要说明,并不对其内在运行机制作详细介绍。 1.Linux操作系统线程调度…...

[OpenWrt 22.03] ttylogin添加登录密码与禁止登录的配置
ttylogin 的使用 Openwrt 串口默认是没有密码的。Openwrt启动后,一个默认的密码将被启用去保护ssh登录和页面(http)登录,而串口登录密码却是空缺的。 对于 Openwrt,当内核初始化后,就会启动第一个进程 init,init进程会进行一系列的系统初始化工作,然后会读取 /etc/in…...

RK3568平台 USB数据包的收发格式
一.USB硬件拓扑结构 compound device :多个设备组合起来,通过HUB跟Host相连composite device :一个物理设备有多个逻辑设备(multiple interfaces) 在软件开发过程中,我们可以忽略Hub的存在,硬件拓扑图简化如下&#x…...

Day 8.TCP通信
TCP通信 TCP发端: socket connect send recv close TCP收端: socket bind listen accept send recv close 1.connect int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 功能:发…...

小游戏加固方案已全面适配微信、QQ、抖音、快手、美团、华为、支付宝渠道
2023年,国内移动游戏收入与游戏用户规模双双创下历史新高。其中小游戏异军突起,市场规模达到200亿元,同比增长300%,成了万众瞩目的行业新风口。 小游戏的高速发展带来了更多的活力,产出了多款月流水过亿的热门游戏。行…...

粉色ui微信小程序源码/背景图/头像/壁纸小程序源码带流量主
云开发版粉色UI微信小程序源码,背景图、头像、壁纸小程序源码,带流量主功能。 云开发小程序源码无需服务器和域名即可搭建小程序另外还带有流量主功能噢!微信平台注册小程序就可以了。 这套粉色UI非常的好看,里面保护有背景图、…...

chrome选项页面options page配置
options 页面用以定制Chrome浏览器扩展程序的运行参数。 通过Chrome 浏览器的“工具 ->更多工具->扩展程序”,打开chrome://extensions页面,可以看到有的Google Chrome扩展程序有“选项Options”链接,如下图所示。单击“选项Options”…...

迭代器失效问题(C++)
迭代器失效就是迭代器指向的位置已经不是原来的含义了,或者是指向的位置是非法的。以下是失效的几种情况: 删除元素: 此处发生了迭代器的失效,因为erase返回的是下一个元素的位置的迭代器,所以在删除1这个元素的时候&…...

2-web端管理界面使用rabbitmq
Web管理界面可以直接操作RabbitMQ,下面进行操作并记录步骤 1、添加交换器: Add a new exchange 中,Name是交换器名称,Type是交换器类型,有direce、fanout、heders、topic 4种。 这里先只填Name和选个类型,…...

【华为OD机试】最多购买宝石数目【C卷|100分】
【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述: 橱窗里有一排宝石,不同的宝石对应不同的价格, 宝石的价格标记为gems[i],0<=i<n, n = gems.length 宝石可同时出售0个或多个,如果同时出售多个,则要求出售的宝石编号连续; 例如…...

RK3588 Android 12 源码编译与开发板烧录
前言 开发板型号:RK_EVB7_RK3588_LP4…_V11 获取RK3588源码 解压RK提供的Android 12的tgz,开通权限 your_verify.sh # 身份验证脚本(由RK提供) .repo/repo/repo sync -l # 检出代码 .repo/repo/repo sync -c # 同…...

学习JAVA的第十四天(基础)
目录 Collection集合 迭代器遍历 增强for遍历 Lambda表达式遍历 List集合 遍历 数据结构 栈 队列 数组 链表 前言: 学习JAVA的第十三天 Collection集合 Collection的遍历方式: 迭代器(不依赖索引)遍…...

安捷伦N5182A信号源 AgilentN5182A
描述: 1)信号特性: 250 kHz to 3 or 6 GHz频率范围 (可选低至 100 kHz) 13 dBm 1GHz输出功率 5dBm输出功率时W-CDMA动态范围:单载波 ≤-73 dBc ;4载波≤-66 dBc ≤1.2 ms切换速度在SCPI模式 2)调制与扫描&#x…...

就业班 2401--3.7 Linux Day13--日志轮转+jumpserver堡垒机
一、日志轮转 日志重要性 Linux系统日志对管理员来说,是了解系统运行的主要途径,因此需要对 Linux 日志系统有个详细的了解。 Linux 系统内核和许多程序会产生各种错误信息、告警信息和其他的提示信息,这些各种信息都应该记录到日志文件中&a…...

信息安全概论 习题
用密钥information构造一个Playfair矩阵 Playfair密码是一种替换加密技术,它不像传统的单字母替换密码那样工作,而是将信息分成一对字母(双字母)进行加密。构造Playfair矩阵时,首先需要一个密钥词,然后根据…...

仓储管理系统(WMS) 的研发历程-PRD撰写
题外话:PRD的展现形式有多种,有的人喜欢在axure上直接做产品描述,觉得word较为过时,有的人认为axure不专业,任何展现形式都无可厚非,重要的达到PRD的目的,PRD的目标是让团队知道需求实现细节&am…...

springboot实现多线程开发(使用@Async注解,简单易上手)
根据springboot的核心思想便捷开发,使用多线程也变得简单起来,通过一下几个步骤即可实现。 核心注解 EnableAsync将此注解加在启动类上,使项目支持多线程。 Async 使用我们的Async注解在所需要进行多线程的类上即可实现。 配置线程池 …...

并发支持库(1)-线程
线程允许多个程序任务在统一时间执行,不同的线程可以共享内存空间,每个线程也有自己的栈空间。 线程类 thread 类thread表示单个执行线程。线程在thread构造对象时开始执行。每个thread对象表示唯一的一个线程,thread不支持复制构造和复制…...

2024年最新阿里云服务器地域选择方法,以及可用区说明
阿里云服务器地域和可用区怎么选择?地域是指云服务器所在物理数据中心的位置,地域选择就近选择,访客距离地域所在城市越近网络延迟越低,速度就越快;可用区是指同一个地域下,网络和电力相互独立的区域&#…...

Frida实战:Java、Native、SO层面的Hook与主动调用详解
引言 Frida是一款强大的动态代码插桩工具,支持对Android和iOS应用进行实时调试和注入。本文将通过实例详细解析如何在Frida中实现对Java层、Native层(JNI)以及.so库内函数的Hook与主动调用。 一、Hook Java层函数 首先,我们展示…...

Codeforces Round 883 (Div. 3)(集训队加训1)
A.如果钉子与地面距离大于绳子的长度就必须剪 #include<bits/stdc.h> #define eps 1e-5 #define INF 1e9 using namespace std; typedef long long ll; const int N 2e6 9; int a[N],b[N],cl[N]; void Lan(){int n;cin>>n;for(int i1;i<n;i){cin>>a[i]…...