【工具类】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 初始化repo
    • repo sync 同步代码,类似于 pull
    • repo 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/709655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【重温设计模式】桥接模式及其Java示例

【重温设计模式】桥接模式及其Java示例 桥接模式的介绍 今天我们要探讨的&#xff0c;正是一种名为“桥接模式”的设计模式。桥接模式&#xff0c;英文名Bridge Pattern&#xff0c;是一种结构型设计模式&#xff0c;它的主要目的是将抽象部分与实现部分分离&#xff0c;使得两…

Windows Docker 部署 Redis

部署 Redis 打开 Docker Desktop&#xff0c;切换到 Linux 内核。然后在 PowerShell 执行下面命令&#xff0c;即可启动一个 redis 服务 docker run -d --name redis -p 6379:6379 redis-如果需要自启动&#xff0c;加 --restart always 参数即可。 连接 Redis 使用客户端连…

python dictionary 字典

Python 字典 字典是另一种可变容器模型&#xff0c;且可存储任意类型对象。 字典的每个键值 key>value 对用冒号 : 分割&#xff0c;每个对之间用逗号(,)分割&#xff0c;整个字典包括在花括号 {} 中 ,格式如下 d {key1 : value1, key2 : value2, key3 : value3 }dict 作…

Vue依赖注入之Provide/Inject

1. 使用<script setup> 父组件 <template><div>这里是父组件的message值:{{ message }}</div><br /><div>这里是父组件的count值:{{ count }}</div><br /><classtest /> </template> <script setup> impor…

进程间的通信

进程间的通信方式&#xff1a; 1.管道 2.信号 3.消息队列 4.共享内存 5.信号灯 6.套接字 1.管道: 1.无名管道 无名管道只能用于具有亲缘关系的进程间通信 pipe int pipe(int pipefd[2]); 功能: 创建一个无名管道 …

上班族小王的考研与考证之路

上班族小王的考研与考证之路 小王是一名普通的上班族&#xff0c;他在一家互联网公司做产品经理。工作几年后&#xff0c;他感到自己的职业发展遇到了一些瓶颈&#xff0c;想要通过进一步的学习来提升自己。 小王首先想到的是考研。他认为&#xff0c;通过考研可以获得更高的…

SpringBoot项目中如何结合Mybatis进行数据库查询

在Spring Boot项目中使用Mybatis进行数据库操作是一种常见的实现方式。下面我将展示如何在Spring Boot项目中整合Mybatis。这个示例将包括几个主要部分&#xff1a;项目依赖配置、配置文件、实体类、Mapper接口及其XML配置文件、服务类、以及一个简单的控制器。 1. 项目依赖配…

Linux Centos7配置SSH免密登录

Linux Centos7配置SSH免密登录 配置SSH免密登录说明&#xff1a; 分两步 第一步、给Server A生成密钥对 第二步、给Server B授权 生成密钥对之后&#xff0c;我们可以看看它保存的目录下的文件。 接下来我们就要把Server A&#xff08;10.1.1.74&#xff09;的公钥拷贝到Se…

AI新秀Mistral:“Open AI“ 新时代

最近互联网出现不少类似“下一代openai”、“GPT-4最强竞品”、“法国AI独角兽”、“欧洲的OpenAI”、“微软新宠儿”.... 的文章&#xff0c;都会附带一张图片&#xff0c;就是下面这张&#xff1a; 那么到底发生了什么&#xff0c;出来个什么东西呢&#xff1f;就是本文的主…

跟着cherno手搓游戏引擎【28】第一个游戏!源码解读!逐行注释!

源码解读&#xff1a; GameLayer层级&#xff1a;在构造函数中&#xff1a;创建窗口和相机&#xff0c;对随机数种子初始化&#xff1b; 在OnAttach方法中&#xff1a;初始化关卡&#xff1a;加载资源初始化地图信息&#xff1b;设置字体&#xff1b; 在OnUpdate方法中&…

大白话解析LevelDB:LRUCache

文章目录 LRUCache 的实现思路lru_ 链表table_ 哈希表in_use_ 链表 LRUCache 的代码实现LRUCache 的定义LRUHandleLRUHandle::key, LRUHandle::hash, LRUHandle::valueLRUHandle::next_hashLRUHandle::next, LRUHandle::prevLRUHandle::chargeLRUHandle::in_cacheLRUHandle::re…

【Elasticsearch查询】查询环境

文章目录 Search查询环境routing&#xff08;路由&#xff09;自适应选择副本策略全局检索超时检索取消并发搜索terminate_aftersearch_typepreferencebatched_reduce_sizeSource禁止_source字段metrics用例数据从source中筛选字段查询 Storestored_fields映射查询 track_score…

从单体服务到微服务:多模式 Web 应用开发记录<三>预初始化属性

相关文章&#xff1a; 多模式 Web 应用开发记录<一>背景&全局变量优化多模式 Web 应用开发记录<二>自己动手写一个 Struts 开头先看一个简单的例子&#xff0c;这是 ftl 文件的一个表单&#xff1a; <form id"validateForm" action"#&quo…

【第十天】C++函数对象/仿函数、谓词、适配器及常见algorithm算法

一、函数对象 重载了函数调用运算符()的类 实例化的对象叫函数对象&#xff0c;也叫仿函数。 如果函数对象 有一个参数 叫&#xff1a;一元函数对象/仿函数如果函数对象 有二个参数 叫&#xff1a;二元函数对象/仿函数如果函数对象 有三个及以上参数 叫&#xff1a;多元函数对…

windows下基于docker-desktop 安装 mysql 5.7

0.背景 docker-desktop v4.27.1Windows 11 22H2 docker-desktop 需要wsl的支持,一般win11新机子都默认开启了,安装docker-desktop 一路next即可.win10老版本需要自行安装开启wsl.一个小建议是,如果你的win10安装wsl时各种错误无法解决,建议升级到win11大概率解决,本人亲身经历…

K8S存储卷与PV,PVC

一、前言 Kubernetes&#xff08;K8s&#xff09;中的存储卷是用于在容器之间共享数据的一种机制。存储卷可以在多个Pod之间共享数据&#xff0c;并且可以保持数据的持久性&#xff0c;即使Pod被重新调度或者删除&#xff0c;数据也不会丢失。 Kubernetes支持多种类型的存储卷…

Three.js-03Vite打包入门

1.安装 说明&#xff1a;创建文件以后&#xff0c;按照提示进行操作。如cd文件夹&#xff0c;npm i ,npm run dev等操作。 npm create vitelatest 2.安装three npm i three.js 4.打开npm官网 说明:搜索three第三方库。按照案例进行操作。 5.修改App.vue文件 <script set…

2024年随想

今天2月最后一天了&#xff0c;明天就是3月了&#xff0c;年也正式算过完了吧。我也到了新的单位工作。新的开始新的工作。很高兴下个月&#xff0c;我自己的小孩就要出生了&#xff0c;我也要正式成为一名父亲了。2024年加油。

Win10Ubuntu22.04+FRP0.54搭建内网穿透

1. 下载FRP安装包&#xff0c;FRP为开源软件&#xff0c;在GITHUB可以直接下载&#xff08;选择当前最新的0.54版本&#xff09;&#xff1a;https://github.com/fatedier/frp/releases 下载windows版本安装包&#xff1a;frp_0.54.0_windows_amd64.zip 下载Linux版本安装包&am…

swift 监听状态栏frame变化

针对状态栏高度做一些操作 import UIKitclass ViewController: UIViewController {private var statusBarFrameObservation: NSKeyValueObservation?override func viewDidLoad() {super.viewDidLoad()if let statusBarManager UIApplication.shared.windows.first?.window…