Android repo技巧:详解repo sync如何单独同步一个或多个仓库

执行 repo sync 命令默认会同步 Android 源码的所有 git 仓库。如果想要单独同步一个、或多个 git 仓库,可以提供一个、或多个 project 参数来指定要同步的 git 仓库路径。具体命令格式如下:

  • Usage: repo sync [<project>...]

关键是,如何知道某个 git 仓库对应的 project 参数值是什么,是 git 仓库所在的子目录名,还是 git 仓库在 repo 中保存的完整目录路径,或是其他?

经过实际测试发现,这里提供的 project 参数值是基于当前 shell 的工作目录寻址到目标 git 仓库的目录路径,而不是 git 仓库在 repo 中保存的完整目录路径,也不是 git 仓库的子目录名。

例如执行 repo status 命令打印了下面的 git 仓库信息:

project android/packages/apps/Settings/ branch branch_m
 -m     res/values-zh-rCN/strings.xml

可以看到,这个 git 仓库在 repo 中保存的完整路径是 android/packages/apps/Settings/,所在的子目录名是 Settings

我们使用 cd 命令进入到 android 子目录,测试如下。

1.在当前的 android 子目录下执行 repo sync android/packages/apps/Settings/ 命令,会执行报错:

$ repo sync android/packages/apps/Settings/
error: project android/packages/apps/Settings/ not found

即,当前 shell 的工作目录在 android 子目录下,把要同步的 git 仓库在 repo 中的完整目录路径 android/packages/apps/Settings/ 作为参数传给 repo sync 命令,会执行报错,基于这个路径不能定位到要同步的 git 仓库。

2.传入 packages/apps/Settings/ 这个路径可以正常执行:

$ repo sync packages/apps/Settings/
Fetching project platform/packages/apps/Settings/

基于当前所在的 android 子目录,可以正常定位到所给 packages/apps/Settings/ 路径下的 git 仓库。

3.使用 cd 命令进入到 android/packages/apps/Settings/ 目录下,然后执行 repo sync . 命令不会报错:

$ repo sync .
Fetching project platform/packages/apps/Settings/

基于这几个测试结果可以发现,repo sync 后面跟着的 project 参数值应该是基于当前 shell 工作目录能够寻址到该 git 仓库的目录路径,类似于 cd 命令的路径寻址方式。

查看 repo help sync 命令打印的帮助信息,对 project 参数的说明如下,符合上面的验证结果:

'repo sync' will synchronize all projects listed at the command line. Projects can be specified either by name, or by a relative or absolute path to the project's local directory. If no projects are specified, 'repo sync' will synchronize all projects listed in the manifest.

即,可以提供 project name、或者提供能够寻址到该 project 本地目录的相对路径或绝对路径来指定要同步的 project。

这里说的 project name 并不是 git 仓库的子目录名,具体值要在 repo 命令生成的 .repo/ 目录下查看。例如,查看 .repo/ 目录下的 manifest.xml 文件,有如下信息:

<project groups="p-fs-release,pdk-fs" name="platform/packages/apps/Settings"
    path="android/packages/apps/Settings"  />

可以看到,Settings 子目录的 git 仓库在 repo 中保存的完整路径是 android/packages/apps/Settings,跟上面例子打印的信息相符。而它的 name 是 platform/packages/apps/Settings

那么只要当前 shell 的工作目录是 Android 源码的子目录,不管在哪个子目录下,执行 repo sync platform/packages/apps/Settings 命令都会同步 Settings 这个 git 仓库的代码,这里不再举例,可以自行验证。


南木阁
考据党一枚,力求讲述的每个知识点都有出处,有理有据。如能恰好地解答您的疑问,欢迎点赞,谢谢!

解读权威文档,编写易懂文章。如有恰好解答您的疑问,多谢赞赏支持~

411 声望
326 粉丝
0 条评论
推荐阅读
Linux技巧:介绍安装完整 man 手册和其他查看姿势
本篇文章介绍在 Linux 中安装完整 man 手册、去掉 man 手册中文版本、和导出 man 手册的方法。安装完整的 man 手册在 Debian 系统、Ubuntu 系统中,可以执行下面命令来安装完整的 man 手册。这会安装系统函数、库...

霜鱼片阅读 6.6k

「持续兼容」微信H5选择照片(图片&视频)及拍照&录像
做过H5调用手机相册或者拍照的同学可能深有体会,在不同型号手机和不同的浏览器上表现各有差异,实属头疼。由于手机自带浏览器或者第三方浏览器实在太多,结合最近正在做的项目用户群体P90在微信上,文本单从兼容...

wuwhs5阅读 583

封面图
openKylin 0.9.5版本正式发布,加速国产操作系统自主创新进程!
2023年1月12日,中国桌面操作系统根社区openKylin(开放麒麟)正式发布openKylin 0.9.5操作系统版本。此版本充分适应5G时代需求,打通平板,PC等设备,实现多端融合,弥补了国产操作系统的短板,有效推动国产操作...

openKylin6阅读 7.9k

封面图
Git的一些最基础操作-以项目为例
在自己刚接触git的时候,心里一直有一个疑问,那就是什么是git?git能用来干什么呢?git是一个分布式的版本控制系统。 那么现在你就知道了,git肯定是用来管理代码版本的,而且还是分布式的。

淼淼真人2阅读 3.6k

git 多用户配置(多用户 & 公司/个人)
多用户配置公司和github,经常会遇到要多用户使用git的情况,以下为配置信息,以下拿xiaoxuete1 & xiaofute2举例设置ssh-key {代码...} 会提示存储的文件名,输入如果需要push时确认的密码,可在该步骤输入.pub文件...

小夫特1阅读 7.4k

工作中常用的git命令
在这类系统中,像 Git,Mercurial,Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像...

vipbic4阅读 873

封面图
程序员英语学习指南
动机为什么程序员要学习英语?工作:我们每天接触的代码都是英文的、包括很多技术文档也是英文的学习:最新最前沿的技术最开始都是只有English版本就业:学好英语让你的就业范围扩大到全球,而不只限于国内目标读...

九旬6阅读 618

解读权威文档,编写易懂文章。如有恰好解答您的疑问,多谢赞赏支持~

411 声望
326 粉丝
宣传栏