1.gclient简介
gclient是谷歌开发的一套跨平台git仓库管理工具,用来将多个git仓库组成一个solution进行管理。总体上,其核心功能是根据一个Solution的DEPS文件所定义的规则将多个git仓库拉取到指定目录。例如,chromium就是由80多个独立仓库组成。
2.相关概念
- hooks: 当gclient拉完代码后执行的额外脚本;
- solution: 一个包含DEPS文件的仓库,可以认为是一个完整的项目;
- DEPS: 一个特殊的文件,规定了项目依赖关系;
- .gclient:一个特殊文件,规定了要拉取的solution,可由
gclient config
命令创建出来; - include_rules:指定当前目录下哪些目录/文件可以被其他代码include包含,哪些不可以被include。
帮助命令:
gclient --help
3.常用命令
3.1 gclient config
该命令会生成.gclient
文件,用于初始化要拉取的solution,其内容记录了solution仓库的地址以及要保存的位置。
我们在拉取chromium代码时第一步其实也是生成了.gclient
文件,内容如下:
solutions = [
{
"url": "https://chromium.googlesource.com/chromium/src.git", # Solution仓库地址
"managed": False,
"name": "src", # 拉取代码后存放的位置
"custom_deps": {}, # 自定义依赖的仓库地址
"custom_vars": {},
},
]
3.2 gclient sync
该命令用于同步solution的各个仓库,它有一些参数:
-f
、--force
:强制更新未更改的模块;--with_branch_heads
: 除了clone默认refspecs外,还会clone "branch_heads" refspecs;--with_tags
: 除了默认的refspec之外,还可以clone git tags;--no-history
: 不拉取git提交历史信息;--revision <version>
: 将代码切换到 version 版本 ;--nohooks
:拉取代码之后不执行hooks。
3.3 gclient runhooks
执行hooks。当你拉取代码时使用了--nohooks
参数时,就可以使用该命令来手动执行hooks。
3.4 gclient recurse
在每个仓库中都执行一条git 命令
3.5 gclient fetch
相当于每个仓库都执行了git fetch
操作。
3.6 gclient diff
相当于每个仓库都执行git diff
操作。
3.7 gclient status
相当于每个仓库都执行git status
操作。
更多指令可以使用gclient --help
查看。
4. 拉取代码流程
使用gclient拉取代码的时,主要使用以下命令:
gclient config <git-url> [--unmanaged]
gclient sync --revision branch_name --nohooks
gclient runhooks