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 熟悉面板 了解完面板之后,下面来试试这些功能都是如何使用的. 文件列表 展示当前页面内所引用资源的列表,和平常 ...
随机推荐
- C++学习四 冒泡排序法的一些改进
冒泡排序法需要两次扫描,所以从时间复杂度来说,是O(n2). 如果用图形表示,是这样的: 但是我们可以加以改进. 首先是,如果在排序中间,整个向量已经达到了有序状态,可以直接跳出来. 这样它的复杂度由 ...
- luoguP1447 [NOI2010]能量采集
https://www.luogu.org/record/22874213 题目大意:给定n和m,求Σ(1<=i<=n)Σ(1<=j<=m)GCD(i,j)* 2-1 i和j的 ...
- c# WF 第6节 MDI窗体
本节内容: 1:SDI 窗体是什么 2: MDI 窗体是什么 3:如何创建MDI窗体 1:SDI 窗体是什么 SDI 窗体 : single-document interface 单一的窗体:上篇的启 ...
- jwt揭秘(含源码示例和视频)
JSON Web Tokens,是一种开发的行业标准 RFC 7519 ,用于安全的表示双方之间的声明.目前,jwt广泛应用在系统的用户认证方面,特别是现在前后端分离项目. 1. jwt认证流程 在项 ...
- python3.5.3rc1学习十:网络请求
#sys模块import sys sys.stderr.write('This is stderr text\n')# 因为从定向有缓冲区,所以需要以下这行代码sys.stderr.flush()sy ...
- [C7] Andrew Ng - Sequence Models
About this Course This course will teach you how to build models for natural language, audio, and ot ...
- 作业一(python初认识)
一.python发展历史 1989,为了度过圣诞假期,Guido开始编写Python语言编译器.Python这个名字来自Guido的喜爱的电视连续剧<蒙蒂蟒蛇的飞行马戏团>.他希望新的语言 ...
- Python equivalent of D3.js
http://brandonrose.org/ Python equivalent of D3.js Ask Question Asked 7 years, 1 month ago Act ...
- boostrap --- 弹窗modal的使用
<input id="btntext" type="button" value="添加文本组件" data-toggle=" ...
- django haystack报错: ModuleNotFoundError: No module named 'blog.whoosh_cn_backend'
在配置django haystack时报错: 解决方案: 将ENGINE的值 改为 这样就可以了.