Repo 常用操作手册
Repo 常用操作手册最近Android开发源码使用repo管理了之前的系统源码也是repo下载的但是实际整个源码在同一个Git仓库现在开发的源码repo下载后整个源码是有十几个Git仓库不同的仓库目录不能相互查看记录非常麻烦。。。要cd到某个文件的仓库目录才能查看和上库分布式管理看起来比较麻烦但是说是有利于移植。只能学习repo一些具体的命令了。有需要的可以收藏看看。文章目录Repo 常用操作手册1. 基础说明1.1 安装配置repo工具1.2 配置Git环境2. 源码拉取与同步2.1 初始化仓库2.2 同步代码 repo sync3. 分支管理3.1 创建本地开发分支 repo start3.2 删除本地分支 repo abandon3.3 查看分支信息 repo branches4. 查看仓库、分支、基线信息4.1 列出所有子仓库 repo list4.2 导出 / 查看当前生效清单 repo manifest4.3 单仓库详细信息 repo info4.4 批量查询真实当前分支最准4.5 全局对比本地代码与基线差异5. 批量执行 Git 命令 repo forall6. 代码提交上传Gerrit 平台7. 检索、辅助工具命令8. 高频场景组合命令9. 易踩坑区分点10、repo manifest 查看所有仓库和对应信息附录Repo与Git行业使用区分未来趋势1底层关系2分场景主流选型场景1Android/AOSP衍生固件电视、车机、机顶盒、手机场景2标准嵌入式LinuxYocto/Buildroot/openEuler、单模块驱动/APP场景3互联网后端、桌面软件、小型工具3 长期发展结论1. 基础说明Repo基于 Git 的多仓库管理工具多用于 Android/AOSP 大项目依靠 manifest.xml 统一管理大量独立 Git 子仓底层所有代码操作均依赖 GitRepo 仅做批量调度不用配置的直接看后面的命令就行。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 ax ~/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 --list2. 源码拉取与同步2.1 初始化仓库# 基础初始化清单地址 清单分支 repo init -u gitxxx/manifest.git -b master # 指定自定义清单文件 repo init -u gitxxx/manifest.git -b rk3588 -m rk3588.xml # 只拉取指定分组模块减少下载体积 repo init -u gitxxx/manifest.git -b android14 -g platform,device参数说明-umanifest 远程仓库地址-bmanifest 仓库分支-m指定 xml 清单文件默认 default.xml-g过滤拉取分组 project2.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/bootloader3.2 删除本地分支 repo abandon# 所有仓库删除分支 repo abandon fn_master_preview --all # 仅删除单个模块分支 repo abandon fn_master_preview release/bootloader3.3 查看分支信息 repo branches# 查看所有通过 repo start 创建的分支及归属仓库 repo branches # 简洁模式展示变更信息 repo branches -v关键输出规则分支名 | in xxxxxx 仓库存在该 repo 创建的分支分支名 | not in xxxxxx 仓库未创建该分支该命令仅记录 repo start 创建的分支无法反映手动 git checkout 后的实时当前分支4. 查看仓库、分支、基线信息4.1 列出所有子仓库 repo list# 完整输出仓库路径 远程地址 repo list # 仅输出仓库路径 repo list -p # 过滤指定模块 repo list | grep release/packages4.2 导出 / 查看当前生效清单 repo manifest# 控制台打印当前 manifest 内容 repo manifest //这个比较实用可以查看当前所有仓库和仓库对应的分支名称 # 导出清单到本地文件 repo manifest -o current_manifest.xml4.3 单仓库详细信息 repo inforepo info release/bootloader输出包含当前分支、manifest 基线版本、远程跟踪分支4.4 批量查询真实当前分支最准# 批量打印每个仓库实时检出分支 repo forall -p -c git rev-parse --abbrev-ref HEAD # 返回 HEAD 代表当前处于 detached 游离状态4.5 全局对比本地代码与基线差异repo diff5. 批量执行 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 branch6. 代码提交上传Gerrit 平台# 交互式暂存所有变更 repo stage -i # 上传当前分支提交到gerrit repo upload # 指定上传目标分支 repo upload --branch release上面这些repo上库命令没用过。7. 检索、辅助工具命令# 全局所有仓库检索文件关键词 repo grep TARGET_PRODUCT # 查看 repo 工具版本 repo --version8. 高频场景组合命令全新拉取完整代码repo init -u gitxxx/manifest.git -b master repo sync -j16同步并复位到基线版本编译repo sync -d -j16全局新建开发分支repo start fn_master_preview --all批量查看所有仓库真实当前分支repo forall -p -c git rev-parse --abbrev-ref HEAD一键清空所有本地未提交改动repo forall -c git reset --hard HEAD git clean -df9. 易踩坑区分点repo branches只记录 repo start 创建的分支归属不能反映手动 git checkout 后的真实当前分支repo sync -d会强制切游离头本地未提交修改会被覆盖操作前务必 commit /stash跨仓库合并 commit 不能用 repo需进入单个子仓使用 git cherry-pick /git mergedetached HEAD 游离状态下提交的 commit 无分支引用容易丢失开发前需 repo start 创建分支。10、repo manifest 查看所有仓库和对应信息release/vendor/ebsw$ git branch * master release/vendor/ebsw$ repo manifest ?xml version1.0 encodingUTF-8? manifest remote fetchssh://devops.ktc.cn:30022/ktc/RD-50/IFPD/ nameorigin/ default remoteorigin sync-j8/ project nameALLin-OS/OS_DEV/Apps/SkgArtifactApps pathrelease/packages/skg/SkgArtifactApps revisionmaster/ project nameALLin-OS/OS_DEV/Apps/SkgArtifactSystem pathrelease/packages/skg/SkgArtifactSystem revisionmaster/ project nameALLin-OS/OS_DEV/MiddleWare/SkgFramework pathrelease/packages/skg/SkgFramework revisionmaster/ project nameALLin-OS/OS_DEV/MiddleWare/SkgSystemApp pathrelease/packages/skg/SkgSystemApp revisionmaster/ project nameALLin-OS/ebsw/sy-allinos-ebsw-native-api-ifpd pathrelease/packages/ebsw revisionmaster/ project nameAML/A311Y3/AN16_OS/SY-A311Y3-AN16-AIDL-EDLA-IFPD pathrelease/vendor/ebsw revisionmaster/ project nameAML/A311Y3/AN16_OS/SY-A311Y3-AN16-bootloader-EDLA-IFPD pathrelease/bootloader revisionfn_master_preview/ project nameAML/A311Y3/AN16_OS/SY-A311Y3-AN16-common-EDLA-IFPD pathrelease revisionfn_master_preview/ project nameAML/A311Y3/AN16_OS/SY-A311Y3-AN16-common-drivers-IFPD pathrelease/common/common16-6.12/common_drivers revisionfn_master_preview/ project nameAML/A311Y3/AN16_OS/SY-A311Y3-AN16-common16-6.12-common-IFPD pathrelease/common/common16-6.12/common revisionfn_master_preview/ project nameAML/A311Y3/AN16_OS/SY-A311Y3-AN16-custom-IFPD pathrelease/custom revisionmaster/ project nameAML/A311Y3/AN16_OS/SY-A311Y3-AN16-device-IFPD pathrelease/device revisionfn_master_preview/ project nameAML/A311Y3/AN16_OS/SY-A311Y3-AN16-device-amlogic-common-IFP pathrelease/device/amlogic/common revisionfn_master_preview/ project nameAML/A311Y3/AN16_OS/SY-A311Y3-AN16-driver-modules-IFPD pathrelease/common/driver_modules revisionfn_master_preview/ project nameAML/A311Y3/AN16_OS/SY-A311Y3-AN16-frameworks-EDLA-IFPD pathrelease/frameworks revisionfn_master_preview/ project nameAML/A311Y3/AN16_OS/SY-A311Y3-AN16-hardware-EDLA-IFPD pathrelease/hardware revisionfn_master_preview/ project nameAML/A311Y3/AN16_OS/SY-A311Y3-AN16-hardware-amlogic-IFPD pathrelease/hardware/amlogic revisionfn_master_preview/ project nameAML/A311Y3/AN16_OS/SY-A311Y3-AN16-kernel-EDLA-IFPD pathrelease/common revisionfn_master_preview/ project nameAML/A311Y3/AN16_OS/SY-A311Y3-AN16-vendor-EDLA-IFPD pathrelease/vendor revisionfn_master_preview/ project nameAML/A311Y3/AN16_OS/SY-A311Y3-AN16-vendor-amlogic-common-IFP pathrelease/vendor/amlogic/common revisionfn_master_preview/ project nameAML/A311Y3/AN16_OS/SY-A311Y3AN16-hardware-amlogic-audio-IFP pathrelease/hardware/amlogic/audio revisionfn_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分场景主流选型场景1Android/AOSP衍生固件电视、车机、机顶盒、手机主流方案Repo Git行业永久标配2026及后续无替代方案适用项目拆分几十~上百个独立Git子仓需要统一基线批量同步、Gerrit批量提交场景2标准嵌入式LinuxYocto/Buildroot/openEuler、单模块驱动/APP主流方案纯原生Git不使用Repo适用整套系统为单一Git仓库仅少量第三方依赖用git submodule管理场景3互联网后端、桌面软件、小型工具主流方案纯Git Git Submodule无Repo使用场景3 长期发展结论Git是所有源码管理的底层基础不会被任何工具替代Repo仅限定Android生态巨型分仓项目使用该领域未来持续主流中小型Linux、应用开发只会使用原生GitRepo不会普及Repo仅做批量封装所有代码提交、分支合并、日志查询底层逻辑均为Git命令。