用git-repo进行git多仓库管理
git-repo 是 Google 开发的 Git 多仓库管理工具,用于管理多个 Git 仓库的协同工作。下面是主要用法:
安装与配置
安装
# 通过 pip 安装
pip install git-repo
# 或使用系统包管理器
# macOS
brew install repo
# Ubuntu/Debian
sudo apt-get install repo
检查是否安装成功:
repo --version
# 如果能正常打印相应的版本号则说明安装成功,否则安装失败
初始化配置
# 配置身份信息
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
基本工作流程
1. 初始化仓库
# 创建并初始化 manifest 仓库
mkdir my-project
cd my-project
git init
2. 创建 manifest 文件
在仓库中创建 .repo/manifests/default.xml:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="origin"
fetch="https://github.com" />
<default remote="origin"
revision="main"
sync-j="4" />
<project name="user/project1" path="project1" />
<project name="user/project2" path="project2" />
<project name="user/project3" path="subdir/project3" />
</manifest>
3. 同步所有仓库
# 初始化 repo 客户端
repo init -u https://github.com/user/manifest-repo.git
# 同步所有项目
repo sync
# 同步特定项目
repo sync project1 project2
# 强制同步(丢弃本地修改)
repo sync -d
常用命令
分支管理
# 查看当前分支状态
repo status
# 在所有仓库中创建分支
repo start feature-branch --all
# 在特定仓库创建分支
repo start feature-branch project1 project2
# 切换分支
repo checkout branch-name
# 列出所有分支
repo branches
代码提交
# 查看所有仓库的修改
repo diff
# 提交到所有仓库
repo upload
# 提交特定仓库
repo upload project1
# 查看提交历史
repo forall -c 'git log --oneline -5'
信息查询
# 列出所有管理的仓库
repo list
# 显示仓库状态
repo status
# 检查未提交的修改
repo forall -c 'git status -s'
高级用法
并行操作
# 并行执行命令(在所有仓库中)
repo forall -j 4 -c 'git fetch origin'
# 执行特定命令
repo forall -c 'git clean -fd'
Manifest 操作
# 查看 manifest 信息
repo manifest -o manifest.xml
# 切换到不同 manifest 分支
repo init -b another-branch
# 查看当前 manifest
repo manifest
实际应用示例
场景1:多仓库协作开发
# 克隆 Android 源码(经典示例)
repo init -u https://android.googlesource.com/platform/manifest
repo sync -j8
# 创建功能分支
repo start my-feature --all
# 开发完成后提交
repo upload
场景2:批量操作
# 批量拉取更新
repo forall -c 'git pull origin main'
# 批量清理
repo forall -c 'git clean -df && git checkout -- .'
# 批量查看日志
repo forall -c 'echo "=== $REPO_PROJECT ===" && git log --oneline -3'
场景3:定制 manifest
# 使用本地 manifest
repo init -m local_manifest.xml
# 包含多个 manifest 文件
repo init -m default.xml -m local.xml
配置选项
.repo/manifest.xml 配置
<manifest>
<!-- 远程仓库配置 -->
<remote name="github"
fetch="https://github.com"
review="review.example.com" />
<!-- 默认配置 -->
<default remote="github"
revision="main"
sync-c="true"
sync-j="4" />
<!-- 项目定义 -->
<project name="owner/repo"
path="path/to/repo"
groups="group1,group2"
revision="develop" />
<!-- 包含其他 manifest -->
<include name="another.xml" />
</manifest>
忽略特定项目
# 同步时排除某些项目
repo sync --groups=default,-notdefault
小贴士
-
性能优化:
# 使用并行同步加速
repo sync -j8
# 使用本地缓存
repo sync -c --no-tags -
问题排查:
# 查看详细日志
repo sync --verbose
# 显示命令执行过程
repo --trace upload -
常用别名:
# 添加到 ~/.bashrc
alias r='repo'
alias rs='repo sync'
alias ru='repo upload'
alias rst='repo status'
alias rl='repo list'
git-repo 特别适合管理 Android 源码、嵌入式系统、微服务架构等多仓库项目,能显著提高协作效率。