repo
是一个用于管理多个 Git 仓库的工具,特别适用于管理大型项目如 Android 的源码。它是由 Google 开发的,用于解决多个 Git 仓库的同步、管理和代码审查等问题。repo
本身是一个 Python 脚本,封装了一些 Git 命令,并提供了额外的功能。
repo 简介
repo
的核心功能是简化对多个 Git 仓库的管理。通过使用 repo
工具,开发者可以同时操作多个 Git 仓库,进行代码同步、提交、上传等操作。repo
依赖一个名为 manifest
的 XML 文件,这个文件描述了项目中所有 Git 仓库的位置和分支信息。
repo 的安装
- 下载
repo
脚本:curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
- 给脚本添加执行权限:
chmod a+x ~/bin/repo
- 确保
repo
命令在 PATH 中:export PATH=~/bin:$PATH
repo 常用指令
以下是一些常用的 repo
指令和它们的功能:
-
初始化仓库:
repo init -u <URL to manifest> -b <branch>
例如,初始化 Android 源码仓库:
repo init -u https://android.googlesource.com/platform/manifest -b master
-
同步代码:
repo sync
repo sync
会从远程服务器拉取所有的代码更新并更新本地仓库。 -
查看当前仓库状态:
repo status
显示所有仓库的状态,包括任何未提交的更改。
-
下载当前项目的最新代码:
repo sync
-
查看所有项目的当前分支:
repo branch
显示每个项目的当前分支。
-
查看仓库信息:
repo info
显示所有仓库的详细信息。
-
提交更改:
repo upload
上传所有已提交的更改到远程服务器进行代码审查。
-
显示当前项目的所有变更:
repo diff
显示所有子仓库中的变更。
-
创建新的分支:
repo start <branch-name> --all
在所有子仓库中创建一个新的分支。
-
重置子仓库:
repo forall -c 'git reset --hard'
对所有子仓库执行
git reset --hard
操作。
repo 所有指令
以下是 repo
支持的所有命令:
-
repo abandon :
放弃一个未合并的分支。 -
repo branches:
显示所有项目的当前分支。 -
repo checkout:
检出一个新的分支。 -
repo diff:
显示当前项目的所有变更。 -
repo download :
下载一个特定的变更。 -
repo forall:
对所有项目执行相同的命令。 -
repo grep :
在所有项目中搜索一个模式。 -
repo init:
初始化仓库。 -
repo list:
显示所有项目。 -
repo prune:
删除所有已经合并的分支。 -
repo rebase:
重新基于新的基础进行变基。 -
repo smartsync:
同步到最新的有效集合。 -
repo stage:
将文件添加到暂存区。 -
repo start:
在所有项目中创建一个新的分支。 -
repo status:
显示所有项目的当前状态。 -
repo sync:
同步所有项目。 -
repo upload:
上传变更以进行代码审查。
示例
假设你要初始化和同步一个 Android 项目:
-
初始化仓库:
repo init -u https://android.googlesource.com/platform/manifest -b master
-
同步代码:
repo sync
高级用法
-
repo仓中有多个git仓时,指定特定git仓进行同步:
repo sync <project>
-
在所有项目中执行 Git 命令:
repo forall -c 'git pull'
-
显示项目日志:
repo log
通过这些命令和用法,你可以高效地管理多个 Git 仓库,特别是在处理像 Android 这样的大型项目时。