执行 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 仓库的代码,这里不再举例,可以自行验证。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。