Repo 常用操作手册

Repo 常用操作手册

最近Android开发源码使用repo管理了;

之前的系统源码也是repo下载的,但是实际整个源码在同一个Git仓库;

现在开发的源码repo下载后,整个源码是有十几个Git仓库;

不同的仓库目录,不能相互查看记录非常麻烦。。。

要cd到某个文件的仓库目录才能查看和上库;

分布式管理看起来比较麻烦,但是说是有利于移植。

只能学习repo一些具体的命令了。有需要的可以收藏看看。

文章目录

  • [Repo 常用操作手册](#Repo 常用操作手册)
    • [1. 基础说明](#1. 基础说明)
      • [1.1 安装配置repo工具](#1.1 安装配置repo工具)
      • [1.2 配置Git环境](#1.2 配置Git环境)
    • [2. 源码拉取与同步](#2. 源码拉取与同步)
      • [2.1 初始化仓库](#2.1 初始化仓库)
      • [2.2 同步代码 repo sync](#2.2 同步代码 repo sync)
    • [3. 分支管理](#3. 分支管理)
      • [3.1 创建本地开发分支 repo start](#3.1 创建本地开发分支 repo start)
      • [3.2 删除本地分支 repo abandon](#3.2 删除本地分支 repo abandon)
      • [3.3 查看分支信息 repo branches](#3.3 查看分支信息 repo branches)
    • [4. 查看仓库、分支、基线信息](#4. 查看仓库、分支、基线信息)
      • [4.1 列出所有子仓库 repo list](#4.1 列出所有子仓库 repo list)
      • [4.2 导出 / 查看当前生效清单 repo manifest](#4.2 导出 / 查看当前生效清单 repo manifest)
      • [4.3 单仓库详细信息 repo info](#4.3 单仓库详细信息 repo info)
      • [4.4 批量查询真实当前分支(最准)](#4.4 批量查询真实当前分支(最准))
      • [4.5 全局对比本地代码与基线差异](#4.5 全局对比本地代码与基线差异)
    • [5. 批量执行 Git 命令 repo forall](#5. 批量执行 Git 命令 repo forall)
    • [6. 代码提交上传(Gerrit 平台)](#6. 代码提交上传(Gerrit 平台))
    • [7. 检索、辅助工具命令](#7. 检索、辅助工具命令)
    • [8. 高频场景组合命令](#8. 高频场景组合命令)
    • [9. 易踩坑区分点](#9. 易踩坑区分点)
    • [10、repo manifest 查看所有仓库和对应信息:](#10、repo manifest 查看所有仓库和对应信息:)
    • 附录:Repo与Git行业使用区分&未来趋势

1. 基础说明

  • Repo:基于 Git 的多仓库管理工具,多用于 Android/AOSP 大项目,依靠 manifest.xml 统一管理大量独立 Git 子仓
  • 底层所有代码操作均依赖 Git,Repo 仅做批量调度

不用配置的,直接看后面的命令就行。

1.1 安装配置repo工具

一般需要管理员进行安装配置

复制代码
# 创建 bin 目录并添加到 PATH
mkdir -p ~/bin
export PATH=~/bin:$PATH

# 下载 Repo 工具
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

# 验证repo版本(显示版本信息即为正常,若报错需检查路径配置)
repo --version
# 若repo版本过旧,执行升级:repo selfupdate

注意:Python环境:Repo工具依赖Python 3,检查Python版本(python --version),确保为3.x版本,若为2.x版本需切换至Python 3。

1.2 配置Git环境

复制代码
# 全局配置Git账号(填写自己的DevOps账号信息,与平台账号一致)
git config --global user.name "你的DevOps用户名"
git config --global user.email "你的DevOps邮箱"
git config --global core.longpaths true  # 解决安卓16源码长路径文件报错
git config --global push.default matching
git config --global credential.helper store  # 缓存凭据,避免重复输入账号密码

# 验证Git配置(无报错即为正常,确认user.name和user.email正确)
git config --list

2. 源码拉取与同步

2.1 初始化仓库

复制代码
# 基础初始化:清单地址 + 清单分支
repo init -u git@xxx/manifest.git -b master

# 指定自定义清单文件
repo init -u git@xxx/manifest.git -b rk3588 -m rk3588.xml

# 只拉取指定分组模块,减少下载体积
repo init -u git@xxx/manifest.git -b android14 -g platform,device

参数说明:

  • -u:manifest 远程仓库地址
  • -b:manifest 仓库分支
  • -m:指定 xml 清单文件,默认 default.xml
  • -g:过滤拉取分组 project

2.2 同步代码 repo sync

复制代码
# 多线程完整同步(推荐)
repo sync -j16

# 同步并强制切回 manifest 基线(detach 游离头)
repo sync -d -j16

# 仅同步单个模块
repo sync release/bootloader

# 强制覆盖本地冲突文件
repo sync -f

# 仅拉取当前分支,不获取全部分支,提速
repo sync -c -j16

重点参数释义:

  • -d / --detach:所有仓库脱离本地开发分支,强制切到清单指定基线版本,进入游离 HEAD,常用于基线编译复位
  • -j:多线程并发下载
  • -f:文件冲突时强制覆盖,慎用(丢失本地未提交修改)

3. 分支管理

3.1 创建本地开发分支 repo start

复制代码
# 全部子仓新建同一分支
repo start fn_master_preview --all

# 仅单个模块创建分支
repo start fn_master_preview release/bootloader

3.2 删除本地分支 repo abandon

复制代码
# 所有仓库删除分支
repo abandon fn_master_preview --all

# 仅删除单个模块分支
repo abandon fn_master_preview release/bootloader

3.3 查看分支信息 repo branches

复制代码
# 查看所有通过 repo start 创建的分支及归属仓库
repo branches

# 简洁模式,展示变更信息
repo branches -v

关键输出规则:

  1. 分支名 | in xxx:xxx 仓库存在该 repo 创建的分支
  2. 分支名 | not in xxx:xxx 仓库未创建该分支
  3. 该命令仅记录 repo start 创建的分支,无法反映手动 git checkout 后的实时当前分支

4. 查看仓库、分支、基线信息

4.1 列出所有子仓库 repo list

复制代码
# 完整输出:仓库路径 + 远程地址
repo list

# 仅输出仓库路径
repo list -p

# 过滤指定模块
repo list | grep release/packages

4.2 导出 / 查看当前生效清单 repo manifest

复制代码
# 控制台打印当前 manifest 内容
repo manifest //这个比较实用,可以查看当前所有仓库和仓库对应的分支名称

# 导出清单到本地文件
repo manifest -o current_manifest.xml

4.3 单仓库详细信息 repo info

复制代码
repo info release/bootloader

输出包含:当前分支、manifest 基线版本、远程跟踪分支

4.4 批量查询真实当前分支(最准)

复制代码
# 批量打印每个仓库实时检出分支
repo forall -p -c "git rev-parse --abbrev-ref HEAD"
# 返回 HEAD 代表当前处于 detached 游离状态

4.5 全局对比本地代码与基线差异

复制代码
repo diff

5. 批量执行 Git 命令 repo forall

统一批量操作所有 / 部分子仓库,-p 打印仓库路径区分输出

复制代码
# 1. 批量查看仓库状态
repo forall -p -c "git status"

# 2. 批量查看最近10条提交日志
repo forall -p -c "git log --oneline -10"

# 3. 批量拉取远程更新
repo forall -c "git fetch origin"

# 4. 批量切换分支
repo forall -c "git checkout master"

# 5. 批量丢弃本地未提交修改(谨慎执行)
repo forall -c "git reset --hard HEAD && git clean -df"

# 6. 仅对指定分组批量执行
repo forall -g skg -p -c "git log --oneline"

# 7. 仅单个模块执行git命令
repo forall release/common -p -c "git branch"

6. 代码提交上传(Gerrit 平台)

复制代码
# 交互式暂存所有变更
repo stage -i

# 上传当前分支提交到gerrit
repo upload

# 指定上传目标分支
repo upload --branch release

上面这些repo上库命令没用过。

7. 检索、辅助工具命令

复制代码
# 全局所有仓库检索文件关键词
repo grep "TARGET_PRODUCT"

# 查看 repo 工具版本
repo --version

8. 高频场景组合命令

  1. 全新拉取完整代码

    repo init -u git@xxx/manifest.git -b master && repo sync -j16

  2. 同步并复位到基线版本编译

    repo sync -d -j16

  3. 全局新建开发分支

    repo start fn_master_preview --all

  4. 批量查看所有仓库真实当前分支

    repo forall -p -c "git rev-parse --abbrev-ref HEAD"

  5. 一键清空所有本地未提交改动

    repo forall -c "git reset --hard HEAD && git clean -df"

9. 易踩坑区分点

  1. repo branches 只记录 repo start 创建的分支归属,不能反映手动 git checkout 后的真实当前分支
  2. repo sync -d 会强制切游离头,本地未提交修改会被覆盖,操作前务必 commit /stash;
  3. 跨仓库合并 commit 不能用 repo,需进入单个子仓使用 git cherry-pick /git merge;
  4. detached HEAD 游离状态下提交的 commit 无分支引用,容易丢失,开发前需 repo start 创建分支。

10、repo manifest 查看所有仓库和对应信息:

复制代码
release/vendor/ebsw$ git branch
* master
release/vendor/ebsw$ repo manifest
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote fetch="ssh://devops.ktc.cn:30022/ktc/RD-50/IFPD/" name="origin"/>
  
  <default remote="origin" sync-j="8"/>
  
  <project name="ALLin-OS/OS_DEV/Apps/SkgArtifactApps" path="release/packages/skg/SkgArtifactApps" revision="master"/>
  <project name="ALLin-OS/OS_DEV/Apps/SkgArtifactSystem" path="release/packages/skg/SkgArtifactSystem" revision="master"/>
  <project name="ALLin-OS/OS_DEV/MiddleWare/SkgFramework" path="release/packages/skg/SkgFramework" revision="master"/>
  <project name="ALLin-OS/OS_DEV/MiddleWare/SkgSystemApp" path="release/packages/skg/SkgSystemApp" revision="master"/>
  <project name="ALLin-OS/ebsw/sy-allinos-ebsw-native-api-ifpd" path="release/packages/ebsw" revision="master"/>
  <project name="AML/A311Y3/AN16_OS/SY-A311Y3-AN16-AIDL-EDLA-IFPD" path="release/vendor/ebsw" revision="master"/>
  <project name="AML/A311Y3/AN16_OS/SY-A311Y3-AN16-bootloader-EDLA-IFPD" path="release/bootloader" revision="fn_master_preview"/>
  <project name="AML/A311Y3/AN16_OS/SY-A311Y3-AN16-common-EDLA-IFPD" path="release" revision="fn_master_preview"/>
  <project name="AML/A311Y3/AN16_OS/SY-A311Y3-AN16-common-drivers-IFPD" path="release/common/common16-6.12/common_drivers" revision="fn_master_preview"/>
  <project name="AML/A311Y3/AN16_OS/SY-A311Y3-AN16-common16-6.12-common-IFPD" path="release/common/common16-6.12/common" revision="fn_master_preview"/>
  <project name="AML/A311Y3/AN16_OS/SY-A311Y3-AN16-custom-IFPD" path="release/custom" revision="master"/>
  <project name="AML/A311Y3/AN16_OS/SY-A311Y3-AN16-device-IFPD" path="release/device" revision="fn_master_preview"/>
  <project name="AML/A311Y3/AN16_OS/SY-A311Y3-AN16-device-amlogic-common-IFP" path="release/device/amlogic/common" revision="fn_master_preview"/>
  <project name="AML/A311Y3/AN16_OS/SY-A311Y3-AN16-driver-modules-IFPD" path="release/common/driver_modules" revision="fn_master_preview"/>
  <project name="AML/A311Y3/AN16_OS/SY-A311Y3-AN16-frameworks-EDLA-IFPD" path="release/frameworks" revision="fn_master_preview"/>
  <project name="AML/A311Y3/AN16_OS/SY-A311Y3-AN16-hardware-EDLA-IFPD" path="release/hardware" revision="fn_master_preview"/>
  <project name="AML/A311Y3/AN16_OS/SY-A311Y3-AN16-hardware-amlogic-IFPD" path="release/hardware/amlogic" revision="fn_master_preview"/>
  <project name="AML/A311Y3/AN16_OS/SY-A311Y3-AN16-kernel-EDLA-IFPD" path="release/common" revision="fn_master_preview"/>
  <project name="AML/A311Y3/AN16_OS/SY-A311Y3-AN16-vendor-EDLA-IFPD" path="release/vendor" revision="fn_master_preview"/>
  <project name="AML/A311Y3/AN16_OS/SY-A311Y3-AN16-vendor-amlogic-common-IFP" path="release/vendor/amlogic/common" revision="fn_master_preview"/>
  <project name="AML/A311Y3/AN16_OS/SY-A311Y3AN16-hardware-amlogic-audio-IFP" path="release/hardware/amlogic/audio" revision="fn_master_preview"/>
</manifest>
release/vendor/ebsw$ cd ..
release/vendor$ git branch   
* fn_master_preview
  master
release/vendor$ cd ..
release$ git branch 
* fn_master_preview
  master
release$ 

图片看比较清楚:

附录:Repo与Git行业使用区分&未来趋势

(1)底层关系

Git是分布式版本控制底层标准,Repo是基于Git开发的多仓库批量管理工具,不能脱离Git独立运行。

(2)分场景主流选型

场景1:Android/AOSP衍生固件(电视、车机、机顶盒、手机)
  • 主流方案:Repo + Git(行业永久标配,2026及后续无替代方案)
  • 适用:项目拆分几十~上百个独立Git子仓,需要统一基线批量同步、Gerrit批量提交
场景2:标准嵌入式Linux(Yocto/Buildroot/openEuler)、单模块驱动/APP
  • 主流方案:纯原生Git,不使用Repo
  • 适用:整套系统为单一Git仓库,仅少量第三方依赖用git submodule管理
场景3:互联网后端、桌面软件、小型工具
  • 主流方案:纯Git + Git Submodule,无Repo使用场景

(3) 长期发展结论

  1. Git是所有源码管理的底层基础,不会被任何工具替代;
  2. Repo仅限定Android生态巨型分仓项目使用,该领域未来持续主流;
  3. 中小型Linux、应用开发只会使用原生Git,Repo不会普及;
  4. Repo仅做批量封装,所有代码提交、分支合并、日志查询底层逻辑均为Git命令。
相关推荐
ZeekerLin2 小时前
AI 原生开发落地路线图:从个人提效到团队体系化
大数据·人工智能
科技圈快迅2 小时前
解决续费痛点,轻量化AI订阅替代方案深度解读
大数据·人工智能
山峰哥2 小时前
‌Explain实战:打开数据库执行计划的黑盒‌
大数据·服务器·数据库·sql·深度优先·宽度优先
A hao3 小时前
HDR LED显示屏工作原理:高动态范围显示技术解析
大数据·图像处理·人工智能
回眸&啤酒鸭3 小时前
【回眸】搞钱灵感——AI 数字人口播博主自动化运营
大数据·人工智能·自动化
AC赳赳老秦3 小时前
Excel 动态仪表盘制作:用 OpenClaw 自动处理数据、生成交互式图表并实时更新仪表盘
大数据·服务器·后端·测试用例·excel·deepseek·openclaw
TTBIGDATA12 小时前
【Ambari Plus】14.Hue 安装
大数据·hadoop·ambari·hdp·hue·cdh·bigtop
AI创界者12 小时前
零基础上手!ComfyUI + LTX-2.3 图生视频完整工作流搭建与调优指南(附避坑细节)
大数据·人工智能
有Li13 小时前
基于扩散模型的超声计算机断层成像实现肌肉骨骼组织高保真三维重建文献速递/基于多模态的医学影像分割与理解
大数据·深度学习·文献·医学生