Google 多源码管理工具 gclient
google的chromium项目是用gclient来管理源码的checkout, update等。 gclient是google专门为这种多源项目编写的脚本,它可以将多个源码管理系统中的代码放在一起管理。甚至包括将git和svn代码放在一起。
gclient的sync,update等命令很容易学习和使用,不再多说,重点说明下和gclient密切相关的两类文件.gclient和DEPS。
.gclient文件是gclient的控制文件,该文件放在工作目录的最上层。".gclient"文件是一个Python的脚本(google真是对python情有独钟啊),定义了一组"solutions",格式类似如下
- solutions = [
- { "name" : "src",
- "url" : "svn://svnserver/component/trunk/src",
- "custom_deps" : {
- # To use the trunk of a component instead of what's in DEPS:
- #"component": "https://svnserver/component/trunk/",
- # To exclude a component from your working copy:
- #"data/really_large_component": None,
- }
- },
- ]
- name : checkout出源码的名字
- url : 源码所在的目录,gclient希望checkout出的源码中包括一个DEPS的文件,这个文件包含了必须checkout到工作目录的源码的信息;
- deps_file 这是一个文件名(不包括路径),指在工程目录中包含依赖列表的文件,该项为可选,默认值为"DEPS"
- custom_deps 这是一个可选的字典对象,会覆盖工程的"DEPS"文件定义的条目。一般它用作本地目录中,那些不用checkout的代码,如
- "custom_deps": {
- "src/content/test/data/layout_tests/LayoutTests": None,
- "src/chrome/tools/test/reference_build/chrome_win": None,
- "src/chrome_frame/tools/test/reference_build/chrome_win": None,
- "src/chrome/tools/test/reference_build/chrome_linux": None,
- "src/chrome/tools/test/reference_build/chrome_mac": None,
- "src/third_party/hunspell_dictionaries": None,
- },
或者让本地目录从不同位置checkout一个新的代码出来,或者checkout不同的分支、版本等。也可以用于增加在DEPS中不存在的新的项 目
- target_os : 这个可选的条目可以指出特殊的平台,根据平台来checkout出不同代码,如
- target_os = ['android']
如果target_os_only值为True的化,那么,仅仅checkout出对应的代码,如
- target_os = [ "ios" ]
- target_os_only = True
在每个checkout出的工程中,gclient期望发现一个DEPS文件(由deps_file来给定),它定义了工程不同部分都是如何checkout出来。
“DEPS”也是一个python脚本,最简单的,如下:
- deps = {
- "src/outside" : "http://outside-server/trunk@1234",
- "src/component" : "svn://svnserver/component/trunk/src@77829",
- "src/relative" : "/trunk/src@77829",
- }
deps的每个条目都包含一个key-value对,key是被checkout的本地目录,而value就是对应的远程URL。
如果路径是以'/'开头的,那么它是一个相对URL,相对与.gclient中URL地址。
URL通常包含一个版本号,以便锁定源码在特定版本上。当然,这是可选的。如果没有,那么它将获取指定分支上最新的版本。
DEPS还可以包含其他类型的数据,如vars,
- vars = {
- 'pymox':
- 'http://pymox.googlecode.com/svn',
- 'sfntly':
- 'http://sfntly.googlecode.com/svn',
- 'eyes-free':
- 'http://eyes-free.googlecode.com/svn',
- 'rlz':
- 'http://rlz.googlecode.com/svn',
- 'smhasher':
- 'http://smhasher.googlecode.com/svn',
- ...
- }
vars定义了一组变量,在后面,可以通过Var(xxx)来访问。Var(xxx)返回一个字符串,故此,也可以进行操作,如
- 'src/third_party/cros_dbus_cplusplus/source':
- Var("git.chromium.org") + '/chromiumos/third_party/dbus-cplusplus.git@5e8f6d9db5c2abfb91d91f751184f25bb5cd0900',
- 'src/third_party/WebKit':
- nbsp; Var("webkit_trunk")[:-6] + '/branches/chromium/1548@153044',
第二个自立,Var("webkit_trunk")[:-6]是一个python表达式,表示取得"webkit_trunk"表示的字符串的最后6个
Hooks:DEPS包含可选的内容 hooks,也有重要的作用,它表示在sync, update或者recert后,执行一个hook操作。
如果使用 --nohooks选项(hook默认执行),那么在gclient sync或者其他操作后,不会执行hook。你可以通过gclient runhooks来单独执行; 如果有 gclient sync --force,那么,无论sync是否成功,都会执行hook。
hook在DEPS中的写法,一般是:
- hooks = [
- { "pattern": "\\.(gif|jpe?g|pr0n|png)$",
- "action": ["python", "image_indexer.py", "--all"]},
- { "pattern": ".",
- "name": "gyp",
- "action": ["python", "src/build/gyp_chromium"]},
- ]
hooks包含一组hook,每个hook有几个重要项:
- pattern 是一个正则表达式,用来匹配工程目录下的文件,一旦匹配成功,action项就会执行
- action 描述一个根据特定参数运行的命令行。这个命令在每次gclient时,无论多少文件匹配,至多运行一次。这个命令和.gclient在同一目录下运行。如果第一个参数是"python",那么,当前的python解释器将被使用。如果包含字符串 "$matching_files",它将该字符串扩展为匹配出的文件列表。
- name 可选,标记出hook所属的组,可以被用来覆盖和重新组织。
deps_os: DEPS中定义不同平台依赖关系的项目,如
- deps_os = {
- "win": {
- "src/chrome/tools/test/reference_build/chrome_win":
- "/trunk/deps/reference_builds/chrome_win@197743",
- "src/third_party/cygwin":
- "/trunk/deps/third_party/cygwin@133786",
- .....
- },
- "ios": {
- "src/third_party/GTM":
- (Var("googlecode_url") % "google-toolbox-for-mac") + "/trunk@" +
- Var("gtm_revision"),
- "src/third_party/nss":
- "/trunk/deps/third_party/nss@" + Var("nss_revision"),
- ....
- },
- ...
- }
deps_os指定不同平台的依赖,它可以包含多种平台,和.gclient中的target_os对应。这种对应关系如下:
- DEPS_OS_CHOICES = {
- "win32": "win",
- "win": "win",
- "cygwin": "win",
- "darwin": "mac",
- "mac": "mac",
- "unix": "unix",
- "linux": "unix",
- "linux2": "unix",
- "linux3": "unix",
- "android": "android",
- }
Google 多源码管理工具 gclient的更多相关文章
- [转]VS2015 Git 源码管理工具简单入门
VS2015 Git 源码管理工具简单入门 1.VS Git插件 1.1 环境 VS2015+GitLab 1.2 Git操作过程图解 1.3 常见名词解释 拉取(Pull):将远程版本库合并到本 ...
- VS2015 Git 源码管理工具简单入门
1.VS Git插件 1.1 环境 VS2015+GitLab 1.2 Git操作过程图解 1.3 常见名词解释 拉取(Pull):将远程版本库合并到本地版本库,相当于(Fetch+Meger) 获取 ...
- Git源码管理工具使用
注明:双击tap键为自动补全操作 1.视频地址:http://www.newbieol.com/course/index_102.html 2.sourcetree是一个拥有界面的git工具吧 下载官 ...
- 【转】Visual Studio团队资源管理器 Git 源码管理工具简单入门
1.1 环境 Visual Studio + GitLab (其他版本同理) 1.2 Git操作过程图解 1.3 常见名词解释 拉取(Pull):将远程版本库合并到本地版本库,相当于(Fetch+Me ...
- gclient多源码管理工具 DEPS文件
gclient来管理源码的checkout, update等. gclient是google专门为这种多源项目编写的脚本,它可以将多个源码管理系统中的代码放在一起管理.甚至包括将Git和svn代码放在 ...
- 源码管理工具Git-客户端GitBash常用命令
1.配置用户名和邮箱地址(第一次启动程序时配置,以后使用不用配置)git config --global user.name "dolen"git config --global ...
- 源码管理工具Git-windows平台使用Gitblit搭建Git服务器
原文地址:https://blog.csdn.net/smellmine/article/details/52139299 搭建Git服务器,请参照上面链接. 注意: 第十二步:以Windows Se ...
- vss2005源码管理工具使用问题
vss2005有账号,但是连接不上,可能是TCP/IP NetBIOS Helper服务停止了,启用即可
- (转)SVN源码管理(上&下)
原文地址:http://www.cnblogs.com/IPrograming/archive/2012/12/15/SVN_1.html 使用SVN进行源码管理(上) 在原来的项目中使用的源码管理工 ...
随机推荐
- VB 核心编程及通用模块开发 笔记1
前言:学习任何编程语言.编程工具的目的不外乎解决生活问题,能够快速.高效解决问题的方式就是不错的方式,至于选择什么“工具”,众位看官看着办,本人虽然有过3年vb开发经验,但是一直没有深入学习,现已购买 ...
- 在centos 6.4下安装opencv 2.3.1
系统环境介绍: centos 6.4 1.安装依赖包 yum install cmake gcc gcc-c++ gtk+-devel gimp-devel gimp-devel-tools gimp ...
- C++ 关联容器详解——从内部结构到应用
关联容器不同于顺序容器的是:顺序容器底层用数组实现,为线性结构:关联容器在实现中,用到的非线性存储方式: 顺序容器是通过元素在容器中的位置顺序存储和访问元素,而关联容器是通过键(key)存储和读取元素 ...
- c++空类的大小
初学者在学习面向对象的程序设计语言时,或多或少的都些疑问,我们写的代码与最终生编译成的代码却大相径庭,我们并不知道编译器在后台做了什么工作.这些都是由于我们仅停留在语言层的原因,所谓语言层就是教会我们 ...
- PHP webserver 之 soap wsdl
强势插入:http://pan.baidu.com/s/1jG62oKm
- 权限管理数据库设计_Rev1
贴出来自身接触项目以来所接触过的一些企业管理信息系统权限部门的一个通用数据库设计初稿: 设计的文字解释以及各部分的作用等确定可行会再进行描述: 图: 如果有不同意见请轻拍!
- Lua基础之语法
目录:1.输出2.注释3.控制语句4.赋值语句5.运算符6.关键字7.变量类型8.其他 原文地址http://blog.csdn.net/dingkun520wy/article/details/49 ...
- poj 2262 Goldbach's Conjecture(素数筛选法)
http://poj.org/problem?id=2262 Goldbach's Conjecture Time Limit: 1000MS Memory Limit: 65536K Total ...
- 1046: [HAOI2007]上升序列 - BZOJ
Description 对于一个给定的S={a1,a2,a3,…,an},若有P={ax1,ax2,ax3,…,axm},满足(x1 < x2 < … < xm)且( ax1 < ...
- Samza在YARN上的启动过程 =》 之二 submitApplication
首先,来看怎么构造一个org.apache.hadoop.yarn.client.api.YarnClient class ClientHelper(conf: Configuration) exte ...