2. chromium开发工具--gclient
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": {},
},
]
以下是可以配置的字段:
- name : checkout出源码的名字
- url : 源码所在的目录,gclient希望checkout出的源码中包括一个DEPS的文件,这个文件包含了必须checkout到工作目录的源码的信息;
- deps_file 这是一个文件名(不包括路径),指在工程目录中包含依赖列表的文件,该项为可选,默认值为"DEPS"
- custom_deps 这是一个可选的字典对象,会覆盖工程的"DEPS"文件定义的条目。一般它用作本地目录中,那些不用checkout的代码;
- target_os : 这个可选的条目可以指出特殊的平台,根据平台来checkout出不同代码
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。
拉取代码主要是根据DEPS文件来进行,它里面的内容包括:
deps: 要获取的子依赖项:
deps = {
"src/outside" : "http://outside-server/trunk@1234",
}
vars:定义字符串变量,一般用于替代公共的字符串,然后通过Var来获取实际的值:
vars = {
'chromium_git': 'https://chromium.googlesource.com'
}
deps = {
'src/chrome/browser/resources/media_router/extension/src':
Var('chromium_git') + '/media_router.git' + '@' + '475baa8b2eb0a7a9dd1c96c9c7a6a8d9035cc8d7',
'src/buildtools':
Var('chromium_git') + '/chromium/buildtools.git' + '@' + Var('buildtools_revision')
}
Hooks:DEPS包含可选的内容 hooks,也有重要的作用,它表示在sync, update或者recert后,执行一个hook操作,也即执行对应的脚本;
hooks = [
{
#config git log format
'name': 'git-log',
'pattern': '.',
'action': [
'python',
'src/git-log/config_commit.py',
],
},
...
]
deps_os:根据不同的平台定义不同的依赖工程,可选的包括:
DEPS_OS_CHOICES = {
"win32": "win``` "win": "win",
"cygwin": "win",
"darwin": "mac",
"mac": "mac",
"unix": "unix",
"linux": "unix",
"linux2": "unix",
"linux3": "unix",
"android": "android",
}
deps_os = {
"win": {
"src/chrome/tools/test/reference_build/chrome_win":
"/trunk/deps/reference_builds/chrome_win@197743",
.....
},
"ios": {
"src/third_party/GTM":
(Var("googlecode_url") % "google-toolbox-for-mac") + "/trunk@" +
Var("gtm_revision"),
....
},
...
}
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拉取代码的时,主要使用以下命令:

2. chromium开发工具--gclient的更多相关文章
- Android 开源控件与常用开发框架开发工具类
Android的加载动画AVLoadingIndicatorView 项目地址: https://github.com/81813780/AVLoadingIndicatorView 首先,在 bui ...
- [译]使用开发工具来调试 Beta 版 WebView
自2014年以来,Android WebView 已经作为一个可更新的系统组件铺平了道路,为 Android 应用程序和用户提供了稳定性和性能改进.现代网络平台功能和安全补丁. 然而,更新可能是一把双 ...
- APICloud首款全功能集成开发工具重磅发布,彰显云端一体理念
近日,APICloud重磅推出首款云端一体的全功能集成开发工具--APICloud Studio 2.为了更深入了解这款开发工具的特性及优势,APICloud CTO 邹达针对几个核心问题做出了解答. ...
- 【Machine Learning】Python开发工具:Anaconda+Sublime
Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...
- XCodeGhost表明:为了安全,开发工具应该从官方网站下载
今天的热门话题就是XCode编译器,这个神器在火热的移动互联网浪潮下也被人利用了,据文章分析 (XCode编译器里有鬼 - XCodeGhost样本分析)http://www.huochai.mobi ...
- 微信小程序开发工具测评
1月9日微信小程序正式上线.很多企业都希望能在这个.但是在技术开发的问题上,却不知道该如何下手.经过一些程序员不辞辛苦连夜测试,终于从十余款工具呕心沥血筛选出四款比较靠谱实用的微信小程序开发工具.接下 ...
- Python 环境搭建,开发工具,基本语法
python环境 https://www.python.org/downloads/ 现在pthon有两个版本 一个是3.5系列的 , 一个是2.7系列的.建议用3.5版本的 开发工具 PyCharm ...
- Chrome 开发工具之Timeline
之前有说到Element,Console,Sources大多运用于debug,Network可用于debug和查看性能,今天的主角Timeline更多的是用在性能优化方面,它的作用就是记录与分析应用程 ...
- Chrome 开发工具之Sources
Sources面板主要用于查看web站点的资源列表及javascript代码的debug 熟悉面板 了解完面板之后,下面来试试这些功能都是如何使用的. 文件列表 展示当前页面内所引用资源的列表,和平常 ...
随机推荐
- unittest,requests,assertEqual实战演练
请求方式:POST请求url:https://api.apiopen.top/developerLogin请求参数:名称 类型 必须 描述 示例name string 是 账号 peakchaopas ...
- Node.js Koa2开发微信小程序服务端
1.promise.async.await const Koa = require('koa') const app = new Koa() // 应用程序对象 有很多中间件 // 发送HTTP KO ...
- 【转】基于Bootstrap的超酷jQuery开关按钮插件
基于Bootstrap的超酷jQuery开关按钮插件
- lua 9 parttern 字符极其简要的介绍
摘自:https://www.lua.org/pil/20.2.html 所有的字符和含义包括: . all characters %a letters %c control characters % ...
- POJ3104Drying(二分)
传送门 题目大意:n件衣服,每件有ai水分.每分钟可自然风干1个水分,或者放入机器中风干k个水分. 问最少花多长时间,衣服全干. 代码: #include<iostream> #inclu ...
- [日常] SNOI2019场外VP记
SNOI2019场外VP记 教练突然说要考一场别省省选来测试水平...正好还没看题那就当VP咯w... Day 1 八点开题打 .vimrc. 先看了看题目名...一股莫名鬼畜感袭来... 怎么T1就 ...
- windows server 2008配置多用户远程连接
打开开始菜单->管理工具->远程桌面服务->远程桌面会话主机配置 右键限制每个用户只能进行一个会话->常规->勾掉限制每个与用户只能进行一个会话 右键远程桌面授权模式-& ...
- python创建文件时去掉非法字符
1.函数作用 windows系统中文件名不能包含 \ / : * ? " < > |想要创建必须过滤掉这些字符 2.函数实现 import re def filename_fil ...
- 利用Python爬虫刷店铺微博等访问量最简单有效教程
一.安装必要插件 测试环境:Windows 10 + Python 3.7.0 (1)安装Selenium pip install selenium (2)安装Requests pip install ...
- Python 多进程池
def get_html(n): time.sleep(n) print("sub_progress success") return n # 多进程池 pool = multip ...