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 仓库的代码,这里不再举例,可以自行验证。

作者:霜鱼片

  • 24
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幻尘科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值