• 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拉取代码的时,主要使用以下命令:

  • 相关阅读:
    HDU_2191_多重背包
    HDU_1494_dp
    POJ_1088_dfs
    所有的畅通工程[HDU1232][HDU1874][HDU1875][HDU1879]
    畅通工程[HDU1863]
    还是畅通工程[HDU1233]
    最小生成树
    Who's in the Middle[HDU1157]
    Bungee Jumping[HDU1155]
    Is It A Tree?[HDU1325][PKU1308]
  • 原文地址:https://www.cnblogs.com/xl2432/p/11596695.html
Copyright © 2020-2023  润新知