google的chromium项目是用gclient来管理源码的checkout, update等。 gclient是google专门为这种多源项目编写的脚本,它可以将多个源码管理系统中的代码放在一起管理。甚至包括将git和svn代码放在一起。

gclient的sync,update等命令很容易学习和使用,不再多说,重点说明下和gclient密切相关的两类文件.gclient和DEPS。

.gclient文件是gclient的控制文件,该文件放在工作目录的最上层。".gclient"文件是一个Python的脚本(google真是对python情有独钟啊),定义了一组"solutions",格式类似如下

  1. solutions = [
  2. { "name"        : "src",
  3. "url"         : "svn://svnserver/component/trunk/src",
  4. "custom_deps" : {
  5. # To use the trunk of a component instead of what's in DEPS:
  6. #"component": "https://svnserver/component/trunk/",
  7. # To exclude a component from your working copy:
  8. #"data/really_large_component": None,
  9. }
  10. },
  11. ]
  • name : checkout出源码的名字
  • url : 源码所在的目录,gclient希望checkout出的源码中包括一个DEPS的文件,这个文件包含了必须checkout到工作目录的源码的信息;
  • deps_file 这是一个文件名(不包括路径),指在工程目录中包含依赖列表的文件,该项为可选,默认值为"DEPS"
  • custom_deps 这是一个可选的字典对象,会覆盖工程的"DEPS"文件定义的条目。一般它用作本地目录中,那些不用checkout的代码,如
  1. "custom_deps": {
  2. "src/content/test/data/layout_tests/LayoutTests": None,
  3. "src/chrome/tools/test/reference_build/chrome_win": None,
  4. "src/chrome_frame/tools/test/reference_build/chrome_win": None,
  5. "src/chrome/tools/test/reference_build/chrome_linux": None,
  6. "src/chrome/tools/test/reference_build/chrome_mac": None,
  7. "src/third_party/hunspell_dictionaries": None,
  8. },

或者让本地目录从不同位置checkout一个新的代码出来,或者checkout不同的分支、版本等。也可以用于增加在DEPS中不存在的新的项 目

  • target_os : 这个可选的条目可以指出特殊的平台,根据平台来checkout出不同代码,如
  1. target_os = ['android']

如果target_os_only值为True的化,那么,仅仅checkout出对应的代码,如

  1. target_os = [ "ios" ]
  2. target_os_only = True

在每个checkout出的工程中,gclient期望发现一个DEPS文件(由deps_file来给定),它定义了工程不同部分都是如何checkout出来。

“DEPS”也是一个python脚本,最简单的,如下:

  1. deps = {
  2. "src/outside" : "http://outside-server/trunk@1234",
  3. "src/component" : "svn://svnserver/component/trunk/src@77829",
  4. "src/relative" : "/trunk/src@77829",
  5. }

deps的每个条目都包含一个key-value对,key是被checkout的本地目录,而value就是对应的远程URL。

如果路径是以'/'开头的,那么它是一个相对URL,相对与.gclient中URL地址。

URL通常包含一个版本号,以便锁定源码在特定版本上。当然,这是可选的。如果没有,那么它将获取指定分支上最新的版本。

DEPS还可以包含其他类型的数据,如vars,

  1. vars = {
  2. 'pymox':
  3. 'http://pymox.googlecode.com/svn',
  4. 'sfntly':
  5. 'http://sfntly.googlecode.com/svn',
  6. 'eyes-free':
  7. 'http://eyes-free.googlecode.com/svn',
  8. 'rlz':
  9. 'http://rlz.googlecode.com/svn',
  10. 'smhasher':
  11. 'http://smhasher.googlecode.com/svn',
  12. ...
  13. }

vars定义了一组变量,在后面,可以通过Var(xxx)来访问。Var(xxx)返回一个字符串,故此,也可以进行操作,如

  1. 'src/third_party/cros_dbus_cplusplus/source':
  2. Var("git.chromium.org") + '/chromiumos/third_party/dbus-cplusplus.git@5e8f6d9db5c2abfb91d91f751184f25bb5cd0900',
  3. 'src/third_party/WebKit':
  4. 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中的写法,一般是:

  1. hooks = [
  2. { "pattern": "\\.(gif|jpe?g|pr0n|png)$",
  3. "action":  ["python", "image_indexer.py", "--all"]},
  4. { "pattern": ".",
  5. "name": "gyp",
  6. "action":  ["python", "src/build/gyp_chromium"]},
  7. ]

hooks包含一组hook,每个hook有几个重要项:

  • pattern 是一个正则表达式,用来匹配工程目录下的文件,一旦匹配成功,action项就会执行
  • action 描述一个根据特定参数运行的命令行。这个命令在每次gclient时,无论多少文件匹配,至多运行一次。这个命令和.gclient在同一目录下运行。如果第一个参数是"python",那么,当前的python解释器将被使用。如果包含字符串 "$matching_files",它将该字符串扩展为匹配出的文件列表。
  • name 可选,标记出hook所属的组,可以被用来覆盖和重新组织。

deps_os: DEPS中定义不同平台依赖关系的项目,如

  1. deps_os = {
  2. "win": {
  3. "src/chrome/tools/test/reference_build/chrome_win":
  4. "/trunk/deps/reference_builds/chrome_win@197743",
  5. "src/third_party/cygwin":
  6. "/trunk/deps/third_party/cygwin@133786",
  7. .....
  8. },
  9. "ios": {
  10. "src/third_party/GTM":
  11. (Var("googlecode_url") % "google-toolbox-for-mac") + "/trunk@" +
  12. Var("gtm_revision"),
  13. "src/third_party/nss":
  14. "/trunk/deps/third_party/nss@" + Var("nss_revision"),
  15. ....
  16. },
  17. ...
  18. }

deps_os指定不同平台的依赖,它可以包含多种平台,和.gclient中的target_os对应。这种对应关系如下:

  1. DEPS_OS_CHOICES = {
  2. "win32": "win",
  3. "win": "win",
  4. "cygwin": "win",
  5. "darwin": "mac",
  6. "mac": "mac",
  7. "unix": "unix",
  8. "linux": "unix",
  9. "linux2": "unix",
  10. "linux3": "unix",
  11. "android": "android",
  12. }

Google 多源码管理工具 gclient的更多相关文章

  1. [转]VS2015 Git 源码管理工具简单入门

    VS2015 Git 源码管理工具简单入门   1.VS Git插件 1.1 环境 VS2015+GitLab 1.2 Git操作过程图解 1.3 常见名词解释 拉取(Pull):将远程版本库合并到本 ...

  2. VS2015 Git 源码管理工具简单入门

    1.VS Git插件 1.1 环境 VS2015+GitLab 1.2 Git操作过程图解 1.3 常见名词解释 拉取(Pull):将远程版本库合并到本地版本库,相当于(Fetch+Meger) 获取 ...

  3. Git源码管理工具使用

    注明:双击tap键为自动补全操作 1.视频地址:http://www.newbieol.com/course/index_102.html 2.sourcetree是一个拥有界面的git工具吧 下载官 ...

  4. 【转】Visual Studio团队资源管理器 Git 源码管理工具简单入门

    1.1 环境 Visual Studio + GitLab (其他版本同理) 1.2 Git操作过程图解 1.3 常见名词解释 拉取(Pull):将远程版本库合并到本地版本库,相当于(Fetch+Me ...

  5. gclient多源码管理工具 DEPS文件

    gclient来管理源码的checkout, update等. gclient是google专门为这种多源项目编写的脚本,它可以将多个源码管理系统中的代码放在一起管理.甚至包括将Git和svn代码放在 ...

  6. 源码管理工具Git-客户端GitBash常用命令

    1.配置用户名和邮箱地址(第一次启动程序时配置,以后使用不用配置)git config --global user.name "dolen"git config --global ...

  7. 源码管理工具Git-windows平台使用Gitblit搭建Git服务器

    原文地址:https://blog.csdn.net/smellmine/article/details/52139299 搭建Git服务器,请参照上面链接. 注意: 第十二步:以Windows Se ...

  8. vss2005源码管理工具使用问题

    vss2005有账号,但是连接不上,可能是TCP/IP NetBIOS Helper服务停止了,启用即可

  9. (转)SVN源码管理(上&下)

    原文地址:http://www.cnblogs.com/IPrograming/archive/2012/12/15/SVN_1.html 使用SVN进行源码管理(上) 在原来的项目中使用的源码管理工 ...

随机推荐

  1. ecshop订单中配送方式报错

    警告内容:Warning: number_format() expects parameter 1 to be double, string given in D:\wamp\www\ecshop_o ...

  2. Ubuntu系统启动时waiting for network

    最近在使用Ubuntu时启动经常会遇到等待网络配置, 每次等待时间都很长,要几分钟,于是在网上看看其他大牛怎么解决该问题. 有些解决方法中有提到删除 网卡硬件信息文件/etc/udev/rules.d ...

  3. 关于Simple.Data.PostgreSql的ExecuteReader没实现非常坑爹的问题

    https://github.com/ChrisMH/Simple.Data.PostgreSql/issues/3 github上有个issues...默认从nuget上下载的Simple.Data ...

  4. (转)《深入理解java虚拟机》学习笔记4——Java虚拟机垃圾收集器

    Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK ...

  5. Core love JavaScript

    Core love JavaScript 前言 在 ASP.NET 团队的 Github 的主页上,有这样一个开源项目叫:"JavaScriptsServices",那么什么是 J ...

  6. 转载:传说中的T检验

    第二周结束:传说中的T检验 小耿2014-01-21 10:58 本文和上一篇笔记一样:语言十分啰嗦.请大家忍耐…… 以前我不懂统计的时候(现在也不懂),只知道数据出来了要做三件事:1,检验一下数据是 ...

  7. 团体程序设计天梯赛-练习集L2-006. 树的遍历

    L2-006. 树的遍历 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历 ...

  8. MyEclipse下查看Java API帮助文档

    每次重装JDK或者升级JDK时,都会忘了如何使MyEclipse关联帮助文档.然后,再花十几分钟重新google搜索,麻烦! 首先下载Javadoc api帮助文档,google搜一下就行了. MyE ...

  9. JavaScript代码调试

    怎么在浏览器中调试JavaScript代码呢?首先,你需要安装Google Chrome浏览器,Chrome浏览器对开发者非常友好,可以让你方便地调试JavaScript代码.安装后,随便打开一个网页 ...

  10. linux命令之-pstree使用说明

    pstree  shows running processes as a tree. The tree is rooted at either pid or init if pid is omitte ...