我们日常工作开发的项目代码目录错综复杂,如果单单用git去管理代码的时候,太费时间,尤其是面对Android庞大的项目工程的代码,用git简直是灾难,这时候就要用到repo来管理项目代码,repo其实git的父亲可以这么说,repo命令可以对所有的有git仓库的目录进行操作
repo工作流程
repo 工具分为两个部分,一部分是 repo 引导脚本,另一部分是 repo 代码。repo 引导脚本里面设置有一个指向 repo 代码的地址,通过执行repo init -u URL [OPTIONS](如$ repo init -u https://android.googlesource.com/platform/manifest -b pzy -m default.xml ),所以repo管理的核心就在于Manifest
Manifest
每个采用 repo 管理的复杂多仓库项目都需要一个对应的 manifest 仓库,如 AOSP 的 manifest ,此仓库用来存储所有子仓库的配置信息,repo 也是读取此仓库的配置文件来进行管理操作。里面的配置就是 xml 定义的结构,例如aosp default repository一般是default.xml。
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<default revision="refs/tags/android-13.0.0_r11"
remote="aosp"
sync-j="4" />
<superproject name="platform/superproject" remote="aosp" revision="android-13.0.0_r11" />
<contactinfo bugurl="go/repo-bug" />
<project path="build/make" name="platform/build" groups="pdk" >
<linkfile src="CleanSpec.mk" dest="build/CleanSpec.mk" />
<linkfile src="buildspec.mk.default" dest="build/buildspec.mk.default" />
<linkfile src="core" dest="build/core" />
<linkfile src="envsetup.sh" dest="build/envsetup.sh" />
<linkfile src="target" dest="build/target" />
<linkfile src="tools" dest="build/tools" />
</project>
<project path="build/bazel" name="platform/build/bazel" groups="pdk" >
<linkfile src="bazel.WORKSPACE" dest="WORKSPACE" />
<linkfile src="bazel.sh" dest="tools/bazel" />
<linkfile src="bazel.BUILD" dest="BUILD" />
</project>
<project path="build/bazel_common_rules" name="platform/build/bazel_common_rules" groups="pdk" />
<project path="build/blueprint" name="platform/build/blueprint" groups="pdk,tradefed" />
<project path="build/pesto" name="platform/build/pesto" groups="pdk" />
<project path="build/soong" name="platform/build/soong" groups="pdk,tradefed" >
<linkfile src="root.bp" dest="Android.bp" />
<linkfile src="bootstrap.bash" dest="bootstrap.bash" />
</project>
<!-- END open-source projects -->
</manifest>
Remote
远程仓库地址配置,可以多个。
name: 名字,也用于子仓库的 git remote 名称(.git/config 里的 remote)
alias: 别名,可省略,建议设为 origin, 设置了那么子仓库的 git remote 即为此名,方便不同的 name 下可以最终设置生成相同的 remote 名称
fetch: 仓库地址前缀,即 project 的仓库地址为: remote.fetch + project.name
pushurl: 一般可省略,省略了则直接用 fetch
review: Gerrit code review 的地址,如果没有用 Gerrit 则不需要配置(也就不能用 repo upload 命令了)
revision: 使用此 remote 的默认分支
repo基础命令
repo命令 | 等同git命令 | 备注 |
repo init -u | 无 | 初始化 |
repo sync | git pull | 同步代码 |
repo upload | git push | 上传代码 |
repo forall | 无 | 多仓执行 |
repo start | git checkout -b | 创建并切换分支 |
repo checkout | git checkout | 切换分支 |
repo status | git status | 状态查询 |
repo branches | git branch | 分支查询 |
repo diff | git diff | 文件对比 |
repo prune | 无 | 删除合并分支 |
repo stage –i | git add --interactive | 添加文件到暂存区 |
repo abandon | git branch -D | 删除分支 |
repo version | 无 | 查看版本号 |
这里用的最多的是多仓执行指令repo forall和repo status。
多仓执行且分支
repo forall -c "git checkout xxx"
repo forall -c "git branch -D yyy"
repo forall -c "git checkout xxx"
repo forall -c "git status"
repo status
repo status -i "指定目录下.git仓库"
repo拉取同步仓库万能命令
repo init -u https://android.googlesource.com/platform/manifest -b pzy -m default.xml && repo sync && repo start pzy --all
这句命令就是说初始化url的default.xml文件中所有git仓库切到pzy分支,并在本地创建pzy分支开始同步代码
本文暂时没有评论,来添加一个吧(●'◡'●)