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
02-13 07:26