【工具类】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 devpush 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 # 同…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
