详解 repo sync 如何指定只同步Android源码的某个仓库

执行 repo sync 命令默认会同步 Android 源码的全部 git 仓库。若是想要单独同步一个、或多个 git 仓库,能够提供一个、或多个 project 参数来指定要同步的 git 仓库路径。具体命令格式以下:android

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

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

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

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

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

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

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

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

$ 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 仓库。orm

2.传入 packages/apps/Settings/ 这个路径能够正常执行:xml

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

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

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

相关文章
相关标签/搜索