Google 多源码管理工具 gclient .

1372人阅读 评论(0) 收藏 举报

本文根据gclient帮助整理。


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. ]  
    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的代码,如

  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. },  
  "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出不同代码,如

  1. target_os = ['android']  
target_os = ['android']
如果target_os_only值为True的化,那么,仅仅checkout出对应的代码,如

  1. target_os = [ "ios" ]  
  2. target_os_only = True  
   target_os = [ "ios" ]
   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 = {
      "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, 

  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 = {
  '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)返回一个字符串,故此,也可以进行操作,如

  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',  
      'src/third_party/cros_dbus_cplusplus/source':
      Var("git.chromium.org") + '/chromiumos/third_party/dbus-cplusplus.git@5e8f6d9db5c2abfb91d91f751184f25bb5cd0900',
    'src/third_party/WebKit':
      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 = [
      { "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中定义不同平台依赖关系的项目,如

  1. deps_os = {  
  2.   "win": {  
  3.     "src/chrome/tools/test/reference_build/chrome_win":  
  4.       "/trunk/deps/reference_builds/chrome_win@197743",  
  5.   
  6.     "src/third_party/cygwin":  
  7.       "/trunk/deps/third_party/cygwin@133786",  
  8.   
  9. .....  
  10.   },  
  11.   
  12.   "ios": {  
  13.     "src/third_party/GTM":  
  14.       (Var("googlecode_url") % "google-toolbox-for-mac") + "/trunk@" +  
  15.       Var("gtm_revision"),  
  16.   
  17.     "src/third_party/nss":  
  18.       "/trunk/deps/third_party/nss@" + Var("nss_revision"),  
  19. ....  
  20.    },  
  21. ...  
  22. }  
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对应。这种对应关系如下:

  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. }  
  DEPS_OS_CHOICES = {
    "win32": "win",
    "win": "win",
    "cygwin": "win",
    "darwin": "mac",
    "mac": "mac",
    "unix": "unix",
    "linux": "unix",
    "linux2": "unix",
    "linux3": "unix",
    "android": "android",
  }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Oracle 11g Client 32位是Oracle公司针对32位操作系统开发的一款客户端软件。它用于与Oracle数据库服务器进行通信和交互,提供管理、开发和连接数据库的功能。 使用Oracle 11g Client 32位,可以通过各种接口和工具访问和管理Oracle数据库。其中包含的一些常用工具如下: 1. SQL*Plus:一个基于文本的工具,可以执行SQL命令,查询和修改数据库中的数据,以及创建和管理数据库对象。 2. SQL Developer:一个图形化的集成开发环境,提供了一个可视化界面,方便开发人员编写和调试SQL代码,管理对象和数据。 3. Oracle Data Pump:用于高效地导入和导出大量数据的工具,可以将数据从其他数据库或文件系统导入到Oracle数据库中,或者将数据从Oracle数据库导出到其他数据库或文件系统中。 4. Oracle Net:提供网络通信和连接管理功能的组件,允许应用程序通过TCP/IP或其他网络协议与远程Oracle数据库服务器通信。 除了这些工具之外,Oracle 11g Client 32位还提供了一些编程接口,如ODBC、JDBC和OCI,使开发人员能够使用自己熟悉的编程语言(如C、Java、Python等)连接和操作Oracle数据库。 总之,Oracle 11g Client 32位是一款强大的数据库客户端软件,它为开发人员和数据库管理员提供了丰富的工具和接口,以便更方便地管理和使用Oracle数据库。无论是开发、测试还是生产环境,它都是与Oracle数据库进行交互的不可或缺的组成部分。 ### 回答2: Oracle11gClient32位是Oracle公司推出的一款用于32位操作系统的客户端软件,它可以与Oracle11g数据库进行连接和通信。 Oracle11gClient32位的主要功能包括: 1. 数据库连接:通过Oracle11gClient32位,用户可以通过网络连接到Oracle11g数据库,进行数据的读取、写入和更新等操作。用户可以使用SQL语言来访问和管理数据库。 2. 数据库工具:Oracle11gClient32位提供了一系列实用的数据库工具,如SQL*Plus、SQL Developer等,可以帮助用户快速开发和管理Oracle数据库。这些工具提供了丰富的功能和界面,方便用户进行数据库的操作。 3. 客户端库:Oracle11gClient32位中包含了一系列客户端库,用于执行与数据库的通信。这些库可以在用户的应用程序中使用,实现数据库连接和数据交互的功能。用户可以使用多种编程语言(如Java、C#等)来编写应用程序,利用这些库来与Oracle11g数据库进行交互。 4. 安全性:Oracle11gClient32位支持网络数据加密和身份验证等安全功能,保护数据和通信的安全性。用户可以通过配置相应的安全选项来提高数据库的安全性。 总之,Oracle11gClient32位是一款功能强大的数据库客户端软件,它提供了丰富的功能和工具,方便用户与Oracle11g数据库进行连接和通信。无论是数据库管理员还是开发人员,都可以通过Oracle11gClient32位来管理和开发Oracle数据库应用程序。 ### 回答3: Oracle 11g客户端32位是由Oracle开发的用于在32位操作系统上连接和管理Oracle数据库的软件。它通过提供一组工具和组件,使用户能够轻松地与Oracle数据库进行通信和交互。 首先,Oracle 11g客户端32位提供了一个图形用户界面工具,称为Oracle SQL Developer,用于开发和管理数据库对象,执行SQL查询和脚本,以及监视和调试数据库性能。它还支持数据导入和导出,方便用户在不同的环境之间迁移数据。 此外,Oracle 11g客户端32位还包含了一个命令行工具,称为SQL*Plus,它可以直接在命令行界面上执行SQL语句和脚本。它是一个强大而灵活的工具,可用于自动化任务和批处理作业,以及进行系统管理和性能诊断。 此外,Oracle 11g客户端32位还提供了一个ODBC驱动程序,允许用户使用第三方应用程序(如Microsoft Excel、Access等)与Oracle数据库进行连接和交互。这样,用户就可以使用他们熟悉的工具来操作Oracle数据库。 需要注意的是,Oracle 11g客户端32位只能在32位操作系统上安装和使用。如果您的操作系统是64位的,应该安装相应的Oracle 11g客户端64位,以提供最佳的性能和兼容性。 总之,Oracle 11g客户端32位是一个强大的工具集,可以帮助用户轻松地连接和管理Oracle数据库。不论是通过图形界面还是命令行工具,它都提供了丰富的功能和选项,满足了用户对数据库操作和管理的各种需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值