概述
我们日常工作开发的项目代码目录错综复杂,如果单单用git去管理代码的时候,太费时间,尤其是面对Android庞大的项目工程的代码,用git简直是灾难,这时候就要用到repo来管理项目代码,repo其实git的父亲可以这么说,repo命令可以对所有的有git仓库的目录进行操作。常用git命令上篇有讲过,没看的同学可以看看。
总结常用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 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分支开始同步代码
作者潘小帅, 是一名Linux底层爱好者,平时写写技术原创文章,徒步,旅游,看电影的爱好,喜欢我的文章可以点赞收藏+关注,感谢你的支持,微信公众号【Linux随笔录】