在用 repo status 命令查看 Android 源码的全部 git 仓库改动时,通常执行起来都比较慢,像是单线程执行,但实际上默认会启用2个选项来同步执行。python
咱们能够使用 repo status 的 -j 选项来指定执行时的多线程数目。查看 repo help status 对 -j 选项的帮助说明以下:git
-j JOBS, --jobs=JOBS
number of projects to check simultaneouslyDescription
The -j/--jobs option can be used to run multiple status queries in parallel.shell
即,能够使用该选项来加快 repo status 命令的执行速度。例如 repo status -j 4
。多线程
查看 .repo/repo/subcmds/status.py
的源码,若是没有提供 -j 选项,默认启用2个线程来执行,以下面的 default=2
所示:线程
p.add_option('-j', '--jobs', dest='jobs', action='store', type='int', default=2, help="number of projects to check simultaneously")
注意:repo status 命令启用多线程执行时,打印出来的信息几率会出现错乱,相似于下面的效果:code
project test/vts-testcase/vndk/ branch local_branchproject toolchain/binutils/ branch local_branch
能够看到,上面的 project toolchain/binutils/ 本该另起一行打印,可是它跟前面的内容打印在了同一行。这是多线程同时输出致使的错乱。ip
以前编写 shell 脚原本过滤 repo status 命令的打印结果,想要打印只且打印发生了改动的信息,就遇到了这种输出信息错乱影响解析的状况。cmd
当时还奇怪没有用 -j 选项来指定启用多线程,为何会有这个问题,查看 repo help status 的帮助信息,也没有说明默认会启用多线程。后来查看了上面的 repo 源码,才确认默认会启用2个线程来同步执行。同步
为了不这种问题,建议在 shell 脚本里面用 repo status -j 1
命令明确指定为单线程执行,避免打印的信息错乱而影响解析。可是这样执行会比较慢,根据实际需求来取舍。源码