在用 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
命令明確指定爲單線程執行,避免打印的信息錯亂而影響解析。可是這樣執行會比較慢,根據實際需求來取捨。源碼