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进行源码管理(上) 在原来的项目中使用的源码管理工 ...
随机推荐
- amazon RequestReport
_GET_SELLER_FEEDBACK_DATA_ MarketplaceIdList 这此字段必填,否则无法取到报告
- Demo学习: Cookies Demo
Cookies Demo 浏览器Cookies的读写,最常用的就是记录用户的登录信息,在项目里做登录界面时也用到了Cookies功能. procedure TMainForm.UniButton2Cl ...
- Gazebo Ros入门
教程代码 First step with gazebo and ros • setup a ROS workspace • create projects for your simulated rob ...
- C++ 容器及选用总结
目录 ==================================================== 第一章 容器 第二章 Vector和string 第三章 关联容器 第四章 迭代器 第五 ...
- Linux进程间通信IPC学习笔记之同步二(SVR4 信号量)
Linux进程间通信IPC学习笔记之同步二(SVR4 信号量)
- 使用bootstrap+asp.net mvc4+IBatis.Net实现的小程序
这个项目用到了三个技术点 1.bootstap 3.0 2.asp.net mvc4 3.IBatis.Net 这个三个技术点分别解决前端界面展示.中间mvc路由控制.实体框架映射数据访问 重点分页问 ...
- showModalDialog 超过问题
a.aspx页面打开一个弹出模式对话框b.aspx. a.aspx 页面页面代码: function SetPlay() { window.showModalDialog('SetAdvertisin ...
- 让用户打开你app的位置功能
+运动 http://www.ccidnet.com/2015/0819/10014152.shtml 让你的app不再是一个购物网站, 而是一种生活方式, 逛街,在实体店逛街积累里程,兑换积分 送 ...
- ASIHTTPRequest的使用(转)
转载自:http://fushengfei.iteye.com/blog/1147112 博客分类: IOS 原文地址:http://wiki.magiche.net/pages/viewpage ...
- The ‘Microsoft.ACE.OLEDB.12.0′ provider is not registered on the local machine. (System.Data)
When you try to import Excel 2007 or later “.xlsx” files into an SQL Server 2008 database you may ge ...