你现在会用 git 了,接下来学 repo(Google 推出来的多仓库管理工具),其实就是在 Git 的基础上做了一层封装,方便同时管理很多 Git 仓库。像 Android 源码、Rockchip 全套 SDK 都是靠 repo 来拉取和管理的。

我给你分几个层次讲:


🔹 一、repo 是什么

  • 本质:一个 Python 脚本,封装了很多 Git 命令。

  • 用途:管理多仓库项目,比如 Android 系统源码包含几百个 git 仓库,一个个 clone 太麻烦,所以用 repo。

  • 工作方式

    1. 项目里有个 manifest.xml 文件,定义了有哪些仓库、各自路径、用什么分支。
    2. repo 读取 manifest.xml,帮你批量 clone/pull/checkout 这些仓库。

🔹 二、repo 的基本安装

# 下载 repo 工具
mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH   # 写到 ~/.bashrc 里

🔹 三、repo 的常用命令(和 git 对照着看)

1. 初始化(类似 git clone)

repo init -u <manifest的git地址> -b <分支>

例子:

repo init -u https://github.com/AOSP/platform_manifest.git -b master

这里 -u 是 manifest 仓库的地址,-b 是分支。

2. 下载源码(类似 git pull)

repo sync

会根据 manifest.xml 把所有仓库拉下来。

3. 查看仓库状态(类似 git status)

repo status

可以看到所有子仓库有没有修改。

4. 提交代码

repo 本身不直接管提交,你还是用 git 提交:

git add .
git commit -m "fix xxx"

5. 提交到服务器(批量上传)

repo upload .

(适合 Android Gerrit 流程;普通 git 服务器还是用 git push

6. 其他常见命令

  • 查看当前仓库列表:

    repo list
    
  • 同步单个仓库:

    repo sync path/to/project
    
  • 切换所有仓库到某个分支:

    repo forall -c 'git checkout dev'
    

🔹 四、学习建议(新手路线)

  1. 先理解 manifest.xml
    打开 manifest.xml 看看,里面有 <project name="..." path="..." revision="..."/>,意思就是:

    • name:远程仓库名
    • path:本地目录名
    • revision:分支
  2. 动手练习

    • 找个开源的 Android manifest 仓库,repo init + repo sync 把代码拉下来。
    • 改一个子仓库的代码,用 git commit 提交。
    • 再用 repo status 看修改效果。
  3. 逐渐过渡到多仓管理
    你可以自己写个简单的 manifest.xml,里面定义 2-3 个 git 仓库,用 repo 来管理。这样对比就能看懂 repo 的价值。


👉 总结:

  • git 是单仓库管理,你已经会了。
  • repo 是多仓库管理,重点是学会 repo initrepo syncrepo forallrepo status
  • 真正提交代码还是用 git,repo 主要帮你批量拉取和切换分支。

要不要我帮你写一个 最小化的 manifest.xml 示例,你可以直接练习 repo init/sync




👌 好的,那我就当你是第一次接触 repo,从零开始写一个“教科书级别”的教程,带你从概念、安装、原理、到实践,一步一步来,尽量用大白话解释。


📖 repo 入门超详细教程(适合初学者)

1. 为什么要学 repo?

你现在已经会 git 了,它可以:

  • git clone 拉一个仓库
  • git pull 更新仓库
  • git push 提交代码

👉 问题来了:如果一个大项目有 几百个 git 仓库 怎么办?
比如 Android 系统:

  • kernel 在一个仓库
  • bootloader 在一个仓库
  • HAL 在另一个仓库
  • 应用、驱动、文档也都在不同仓库

如果你自己 git clone 几百次,麻烦到爆炸!

所以 Google 设计了 repo

  • 你只要下载 一个 manifest 文件(仓库列表)
  • repo 会帮你把所有仓库拉下来、更新、切换分支

可以理解为:

repo = 管理很多 git 仓库的“管家”
git = 管理单个仓库的工具


2. 安装 repo

  1. 在 Linux(Ubuntu/Debian 为例)里新建一个目录保存 repo 工具:

    mkdir -p ~/bin
    
  2. 下载 repo 脚本:

    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    
  3. 加执行权限:

    chmod a+x ~/bin/repo
    
  4. 加到环境变量(写到 ~/.bashrc):

    export PATH=~/bin:$PATH
    source ~/.bashrc
    

检查是否安装成功:

repo --version

如果能输出版本号,说明 OK ✅


3. repo 的核心原理(大白话版)

repo 其实就是依赖一个 manifest.xml 文件,这个文件里面写着:

<manifest><remote name="origin" fetch="https://github.com/" /><default revision="main" remote="origin" sync-j="4" /><project name="torvalds/linux" path="kernel" revision="master" /><project name="git/git" path="tools/git" revision="master" />
</manifest>

解释:

  • <remote> 定义远程仓库的地址前缀

  • <default> 定义默认的分支、远程、同步方式

  • <project> 定义一个子仓库:

    • name:远程仓库名
    • path:下载到本地的路径
    • revision:要拉的分支

👉 这样,repo 就能批量 clone/pull 这些仓库。


4. repo 的常用命令(一步步学)

① 初始化项目(类似 git clone

repo init -u <manifest 仓库地址> -b <分支>

例子:

repo init -u https://android.googlesource.com/platform/manifest -b master

这一步会下载 manifest.xml,相当于告诉 repo:“我的项目有哪些仓库”。


② 拉取所有仓库(类似 git pull

repo sync

它会根据 manifest.xml,把所有项目都下载下来。

小技巧:

  • repo sync -c 只拉取当前分支
  • repo sync -j4 并行下载,速度快

③ 查看所有仓库状态(类似 git status

repo status

会列出所有子仓库的修改情况。


④ 在所有仓库里执行命令

repo forall -c 'git branch'

意思是:在每个子仓库里都执行 git branch,看看都在哪个分支。


⑤ 提交代码

注意:repo 不改变 git 的使用方式,还是用 git 提交:

git add .
git commit -m "fix bug"
git push origin dev

如果你是 Android Gerrit 开发环境,可以用:

repo upload .

(这个命令会帮你 push 到 Gerrit 审核服务器)


5. 实战:写一个自己的 repo 项目

我们自己写一个最小化的 manifest 来体验一下:

  1. 新建一个目录:

    mkdir ~/myrepo && cd ~/myrepo
    
  2. 创建 manifest 仓库(比如放到 GitHub 上),在里面写 default.xml

    <manifest><remote name="origin" fetch="https://github.com/" /><default revision="master" remote="origin" sync-j="4" /><project name="torvalds/linux" path="kernel" revision="master" /><project name="git/git" path="tools/git" revision="master" />
    </manifest>
    
  3. 初始化并下载:

    repo init -u https://github.com/你的用户名/manifest.git -b master
    repo sync
    
  4. 看效果:

    tree .
    

    你会发现 kerneltools/git 两个仓库都被拉下来了。


6. 学习路线图(适合你这样的初学者)

  1. 第一步:在一个小项目里用 repo,熟悉命令(initsyncstatusforall)。
  2. 第二步:打开 manifest.xml,理解里面仓库的组织方式。
  3. 第三步:在大项目(比如 Android 或者 Rockchip SDK)里使用 repo,体会它管理几百个仓库的威力。

7. 总结(背口诀)

  • git 管理一个仓库repo 管理很多仓库

  • 常用命令:

    • repo init → 初始化
    • repo sync → 拉源码
    • repo status → 看修改
    • repo forall → 批量执行命令

repo 本质还是 git,所以你 git 学得越熟,repo 就越容易。


要不要我帮你写一个 “小白练手用的 manifest.xml + 步骤脚本”,你直接复制粘贴就能玩?

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

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

相关文章

[SWERC 2020] Safe Distance题解

[SWERC 2020] Safe Distance 题意 给定 NNN 个点与一个坐标 (X,Y)(X,Y)(X,Y)&#xff0c;求从点 (0,0)(0,0)(0,0) 到点 (X,Y)(X,Y)(X,Y) 规划一条路线&#xff0c;不能走出 (0,0)(0,0)(0,0) 与 (X,Y)(X,Y)(X,Y) 间形成的矩形&#xff0c;使得通过这条路线时距离最近的点的距离…

Rewind-你人生的搜索引擎

本文转载自&#xff1a;Rewind-你人生的搜索引擎 - Hello123工具导航 ** 一、&#x1f50d; Rewind 是什么&#xff1f;你的数字记忆增强神器 Rewind 是一款人工智能驱动的个人记忆助手&#xff0c;就像为你配备了一个「数字第二大脑」。它能自动记录、保存并索引你在电脑和手…

开发小点 - 存

开发小点 1.Req注解 EqualsAndHashCode(callSuper true) Data public class BillSituationReq extends BillQueryReq {/*** Whether to display the ring ratio, default is not displayed*/ApiModelProperty("Whether to Display YoY Comparison")private Boolean …

只会npm install?这5个隐藏技巧让你效率翻倍!

原文链接&#xff1a;https://mp.weixin.qq.com/s/nijxVWj-E5U08DX2fl3vgg最近有个刚学前端的小伙伴问我&#xff1a;“为什么我的node_modules这么大&#xff1f;为什么别人装依赖那么快&#xff1f;npx到底是啥玩意儿&#xff1f;” 相信不少人都跟他一样&#xff0c;对npm的…

(二).net面试(static)

文章目录项目地址一、基础501.1 new keyword1.2 static class vs. static method1. static class2. static method3. static constructor 静态构造函数4. 静态成员的生命周期1.3 LinQ1.what is LinQ2. List<T>、IEnumerable<T>、IQueryable<T>3. 在数据库里用…

docker,本地目录挂载

理解Docker本地目录挂载的基本概念Docker本地目录挂载允许容器与宿主机共享文件或目录&#xff0c;实现数据持久化和实时交互。挂载方式分为bind mount和volume两种&#xff0c;前者直接映射宿主机路径&#xff0c;后者由Docker管理存储路径。本地目录挂载的核心方法bind mount…

IO多路复用相关知识

select、poll、epoll 在传入的性能差异是不是体现在&#xff0c;当有新的连接过来&#xff0c;此时需要将新的fd传入到内核中&#xff0c;但是poll/select需要出入整个数组&#xff0c;而epoll方式只需要出入单个fd&#xff1f; 1. select/poll 的情况它们没有内核中“长期保存…

【CF】Day139——杂题 (绝对值变换 | 异或 + 二分 | 随机数据 + 图论)

B. Meeting on the Line题目&#xff1a;思路&#xff1a;数形结合首先考虑如果没有 t 的影响该怎么写显然我们就是让最大时间最小化&#xff0c;那么显然选择最左端点和最右端点的中间值即可&#xff0c;即 (mi mx) / 2&#xff0c;那么现在有了 t 该怎么办我们不妨考虑拆开绝…

在 Ubuntu 上安装和配置 PostgreSQL 实录

一、查看ubuntu版本 lsb_release -a postgresq尽量安装在新的稳定版本的ubuntu上 二、安装postgresql 2.1 直接安装 sudo apt install postgresql 结果如下 2.2 使用PPA源安装 Ubuntu官方源提供了PostgreSQL的PPA(Personal Package Archive),通过PPA源安装可以确保获取…

WebGIS三维可视化 + 数据驱动:智慧煤仓监控系统如何破解煤炭仓储行业痛点

目录 一、项目背景&#xff1a;煤炭仓储管理的痛点与转型需求 二、建设意义&#xff1a;从 “被动管理” 到 “主动掌控” 的价值跃迁 三、项目核心&#xff1a;技术架构与核心目标的深度融合 四、数据与技术&#xff1a;系统稳定运行的 “双支柱” &#xff08;一&#x…

使用 Spring Security 实现 OAuth2:一步一步的操作指南

前言 OAuth 是一种授权框架&#xff0c;用于创建权限策略&#xff0c;并允许应用程序对用户在 HTTP 服务&#xff08;如 GitHub 和 Google&#xff09;上的账户进行有限访问。它的工作原理是允许用户授权第三方应用访问他们的数据&#xff0c;而无需分享他们的凭证。本文将指导…

VMware共享文件夹设置

启用共享文件夹 编辑虚拟机设置-选项-共享文件夹&#xff0c;上面的选项选择启用下面点击添加一个路径&#xff0c;跟着向导走 设置共享文件夹在主机的路径&#xff0c;和文件夹名称添加完成后可以点击这个共享文件夹条目&#xff0c;查看属性虚拟机里安装vm-tools sudo apt up…

华为云昇腾云服务

华为云&#xff0c;一切皆服务共建智能世界云底座面向未来的智能世界&#xff0c;数字化是企业发展的必由之路。数字化成功的关键是以云原生的思维践行云原生&#xff0c;全数字化、全云化、AI驱动&#xff0c;一切皆服务。华为云将持续创新&#xff0c;携手客户、合作伙伴和开…

Axum 最佳实践:如何构建优雅的 Rust 错误处理系统?(三)

引言 作为开发者&#xff0c;我们都经历过这样的场景&#xff1a;项目上线后&#xff0c;你打开日志监控&#xff0c;铺天盖地的 500 Internal Server Error 扑面而来。这些错误像个黑洞&#xff0c;吞噬着你的调试时间&#xff0c;你甚至不知道它们是从数据库查询失败&#x…

MySQL高可用方案解析:从复制到云原生

MySQL 的高可用 (High Availability, HA) 方案旨在确保数据库服务在硬件故障、软件崩溃、网络中断或计划维护时仍能持续可用&#xff0c;最小化停机时间&#xff08;通常目标为 99.9% 至 99.999% 可用性&#xff09;。以下是 MySQL 领域成熟且广泛应用的几种主流高可用方案&…

腾讯云语音接口实现会议系统

1.前言 在现代企业协作环境中&#xff0c;高效的会议管理是提升团队生产力的关键。本文将深入解析一个完整的会议管理系统&#xff0c;涵盖从会议创建到总结生成的完整生命周期。该系统构建一个基于AI技术的智能会议系统&#xff0c;实现会议全流程的智能化管理&#xff0c;包括…

【LeetCode 每日一题】1277. 统计全为 1 的正方形子矩阵

Problem: 1277. 统计全为 1 的正方形子矩阵 文章目录整体思路完整代码时空复杂度时间复杂度&#xff1a;O(m * n)空间复杂度&#xff1a;O(m * n)整体思路 这段代码旨在解决一个经典的二维矩阵问题&#xff1a;统计全为 1 的正方形子矩阵个数 (Count Square Submatrices with …

【论文阅读】MedResearcher-R1: 基于知识引导轨迹合成框架的专家级医学深度研究员

论文链接&#xff1a;https://arxiv.org/pdf/2508.14880 【导读】当通用大模型还在“背题库”时&#xff0c;蚂蚁集团联合哈工大推出的 MedResearcher-R1 已把“临床查房”搬进训练场&#xff01;这篇 2025 年 9 月发布的论文&#xff0c;首次让开源 32B 模型在医学深度研究基准…

基于大语言模型的事件响应优化方案探索

程序员的技术管理推荐阅读 当愿望遇上能力鸿沟&#xff1a;一位技术管理者眼中的团队激励思考 从“激励”到“保健”&#xff1a;80后与90后程序员&#xff0c;到底想要什么&#xff1f; 从“激励”到“保健”&#xff1a;80后与90后程序员&#xff0c;到底想要什么&#xff1f…

数字化浪潮下,传统加工厂如何智能化转型?

在制造业向高端化、服务化升级的今天&#xff0c;传统加工厂正面临前所未有的挑战。订单碎片化、人力成本攀升、设备OEE&#xff08;综合效率&#xff09;长期低于50%、质量波动难以追溯……这些痛点不仅压缩着企业利润空间&#xff0c;更让其在应对市场需求变化时显得迟缓。当…