深入理解 depot_tools:Chromium 源码开发全流程(fetch/gclient/git cl 使用详解与踩坑经验)

Depot Tools 教程 Depot Tools 是一组用于管理和同步 Chromium 和 WebRTC 项目依赖的工具集,包括gclientgit-clrepo和gn等。本文将详细介绍这些工具的安装、配置和使用方法。 阅读详情

一、前言:为什么要了解 depot_tools?

对于浏览器开发工程师来说,无论是参与 Chromium / Chrome / 360 内核开发,还是想调试学习浏览器底层机制,“源码拉取 → 依赖同步 → 构建 → 提交” 是绕不开的几件大事。

这些工作在普通项目中可能只需要一个 git clone 就结束了,但在 Chromium 这类 超大规模多仓库项目 中却极其复杂——

  • 主仓库超过 30GB

  • 依赖仓库多达 数百个

  • 每个仓库都有自己的 commit/branch

  • 提交必须走 Gerrit、Hook、TryBot 等流程

为了彻底降低使用门槛,Google 官方推出了一套脚本工具,统称为 depot_tools,它几乎是 “Chromium 开发者的瑞士军刀”。


二、什么是 depot_tools?

depot_tools = 一整套脚本 + 执行工具的集合

它包含:

工具名作用
fetch一键拉取 Chromium/其他仓库源代码
gclient依赖管理与同步工具(解析 DEPS 文件)
git cl提交/上传/下载 patch(与 Gerrit 交互)
autoninja快速构建(调度 ninja)
cipd包管理工具,用于下载编译工具链等二进制文件
...其它辅助脚本

☑️ depot_tools 不是安装软件,无需安装,只需要把它加入 PATH 即可。


三、fetch:第一次拉取源码的最佳工具

3.1 fetch 做了什么?

  • 创建 .gclient 配置文件

  • 下载主仓库(如 chromium/src)

  • 根据仓库内的 DEPS 文件自动拉取依赖仓库

  • 下载工具链(clang / python / node / gn 等)

也就是说,你只敲一个命令就能把 “整个 Chromium 开发环境” 搭好。


3.2 常用命令

# 拉取最新 chromium fetch chromium # 指定版本 fetch chromium --nohooks --revision 120.0.6112.4 # 拉取 v8 fetch v8 # 拉取 other-project fetch <项目名> [--options...]

⚠️ 常见误区 1:
很多人执行 fetch 后直接开始写代码,结果发现缺一堆依赖工具没下,比如 clang-format、gn、ninja,原因是没执行 hooks。

gclient runhooks

这是必须的,通常建议:

fetch xxx --nohooks gclient sync gclient runhooks


3.3 fetch 常见踩坑

场景原因解决
卡在 "Checking out bundle ..."网络访问 Google @国外服务器配置科学网络或者使用国内镜像(GitMirrors、清华)
报错 “Key ‘deps’ error”depot_tools 太旧或 Python 版本不兼容更新 depot_tools,确保使用 Python>=3.8
下载了 20% 就中断Git 超时或被 reset使用 --no-history 或者加 --depth=1
Node/clang 没有正确下载没运行 hooksgclient runhooks

四、gclient:依赖管理的“大总管”

4.1 gclient 是什么?

它是一个 统一门面脚本,用于解析 Chromium 项目里的 DEPS 文件,把依赖仓库一个一个拉下来,确保版本一致。

不同于普通 Git 子模块,gclient 支持:

  • 指定精确的 commit

  • 递归依赖

  • patch / 变更同步

  • hook 脚本


4.2 日常高频指令整理

命令作用
gclient sync拉取主仓库和所有依赖
gclient sync --with_branch_heads拉取所有 branch
gclient sync --revision src@xxx同步指定版本
gclient revert丢弃所有修改
gclient runhooks执行构建相关脚本
gclient status查看当前依赖状态

4.3 gclient sync 踩坑经验

  1. 一直卡在某个仓库,速度极慢
    → 说明该仓库走的是 https://chromium.googlesource.com/...,需要科学网络。暂时解决办法:

    • 修改 .gclient 中 https:// → https://e.coding.net/... 镜像

    • 或者单独把那个仓库 clone 到 src/third_party/... 内再执行 gclient sync

  2. “solutions” 错误 / 重复
    → .gclient 文件被手动修改错了
    → 最快办法:删除 .gclient 文件,重新 fetch 一次

  3. DEPS 更新之后编译失败
    → gclient 更新了依赖,但 build 目录中的 ninja 文件没更新
    → 解决:

    rm -rf out/Default gn gen out/Default autoninja -C out/Default chrome


五、git cl:用来提交 / 上传 / patch / 评审

和普通 Git 的区别在于:

普通 Gitgit cl
git pushgit cl upload (上传到 Gerrit)
git applygit cl patch <id>(从 Gerrit 拉 patch)
git checkoutgit cl issue <id>(切换到某个 changelist)
无git cl try(触发 TryServer 编译)

5.1 最小工作流

git new-branch myfix ... 修改代码 ... git add . && git commit -m "Fix xxx" git cl upload

此时会进入 Gerrit 评审界面,等 reviewer 给 LGTM.


5.2 高频场景踩坑合集

场景问题原因解决办法
upload 时提示 “no issue found and upload denied”没有设置 Gerrit 账号 / 没通过身份认证git config --global user.email ...
reviewer 看不到代码commit message 第 1 行不是英文简洁描述调整 commit message 重新 upload
触发 try 时报 “No try job matches”没有配置 .trybotsgit cl try --bot <bot-name>
patch 切换失败 “dirty tree”当前工作区存在未提交内容git stash / git cl discard
patch 应用后出现冲突patch 版本落后于主仓库git rebase origin/main 再 upload

六、工具之间的完整链路关系图

首次拉代码 ↓ fetch ↓ +----------------------+ | 创建 .gclient | | 拉主仓库 | | 生成 DEPS | +----------------------+ ↓ gclient sync ↓ ┌-------------------------┐ │ 依赖仓库1 (third_party) │ │ 依赖仓库2 │ │ ... │ └-------------------------┘ ↓ gclient runhooks ↓ gn / ninja ↓ (可选) git cl upload


七、小结 & 建议

建议
✅ 第一次拉源码:fetch + gclient sync + runhooks
✅ 每天更新代码:gclient sync
✅ 修改/提交:git new-branch → commit → git cl upload
✅ 不要手改 .gclient 和 DEPS,除非你非常清楚它是干什么的
⚠️ 遇到“奇怪错误”第一件事情:更新 depot_tools
⚠️ 编译失败优先怀疑:是不是没 runhooks / 没重新 gn
✅ 如果你在中国大陆工作,强烈建议配置代理或镜像源
webrtc】windows 构建 :depot_tools 采坑 chrome 开源项目的构建工具 dep_tools owt webrtc chrome 都需要这个工具作为构建脚本 之前在公司机器 整的,感觉很容易 可能公司默认是hk vpn环境吧 换了自己购买的vpn,在家里机器只能自己搞了,暴露了很多问题, python3_bin_reldir 搜了下也没看到有文档说明用法,只能盲目尝试。 都快2021年了,浪费时间在环境上,真是不值得。 py2+ 加代理 + cmd.exe (最好管理员) py2的路径 C:\Python27 ,我是64位的,下载地址在.. 阅读详情

相关推荐

WebRTC开发工具集:depot_tools使用指南

本文还有配套的精品资源,点击获取 简介:"depot_tools.rar"是WebRTC开发者所需的工具集合,由Google开发,包含Git、Gclient、GN等,用于构建和管理WebRTC项目。本指南将指导开发者通过depot_tools搭建WebRTC开发环境,从解压、配置环境、构建WebRTC到测试和调试,确保开发者能高效完成WebRTC相关开发任务。 1...

weixin_30533301的博客 1653

depot_tools

用于Chromium开发的工具。要支持python 3,需要python 2.7或3.8。 工具 最重要的工具是: fetch:gclient用于签出项目的包装器。使用fetch --help更多的细节。 gclient:元签出工具。考虑repo或git子模块,除非它支持特定于操作系统的规则,例如,签出Android时不要签出Windows依赖项。使用gclient help更多的细节和README.gclient.md。 git cl:与Rietveld或Gerrit交互的代码审查工具。使用gi

顺其自然~专栏 1万+

depot_tools:Chromium项目构建与管理工具集

autoninja是depot_tools提供的一个封装ninja的工具,用于自动化构建过程。它通过分析构建脚本并找出依赖关系来优化构建过程。autoninja不仅包含ninja的所有功能,而且还在其基础上增加了编译器缓存和更智能的构建优化功能。在大型项目中,autoninja能够显著地减少重复编译的时间,提升整体的构建效率。Gsutil.py是一个Python工具集,它提供了命令行接口来操作Google Cloud Storage (GCS)。

weixin_35920379的博客 1057

depot_tools原理和实现

depot_tools的原理和实现

bjrxyz的专栏 5098

depot_tools:谷歌源代码管理与构建工具套件指南

depot_tools是Google开发的一个工具集,广泛应用于其内部和开源项目中,包括但不限于Chromium和Skia等。本章将从depot_tools的基本功能出发,深入探讨它的设计哲学和具体应用,帮助读者快速理解depot_tools的重要性及其在现代软件开发中的核心作用。depot_tools是一套工具的集合,它提供了与Google的内部代码仓库交互所需的各种命令行工具。尽管它主要用于Google的项目,但许多外部开发者也因其强大的功能和便捷的操作而广泛使用。

weixin_42518874的博客 825

chromium 编译工具depot_tools

chromium源码编译需要的资源 直接解压到跟源码对应的路径下面 并添加路径到环境变量中

Chromium编译指南2024 Windows11篇-配置depot_tools工具(二)

在《Chromium编译指南2024(一)》我们探讨了Chromium编译前的准备工作和Visual Studio安装。接下来,我们将详细介绍如何下载、解压并配置depot_tools工具,以便顺利进行后续的开发工作。depot_tools工具是Chromium开发过程中不可或缺的重要工具之一。它将帮助您管理Chromium代码库,进行版本控制和代码同步,为您的开发工作提供便利和支持。通过以上步骤,您已经成功下载、解压并配置了depot_tools工具,现在可以继续使用它进行开发和管理项目。

守城小轩的技术窝棚 3853

NeuralKG的安装及简单demo使用(浙江大学开源知识图谱表示学习工具)

记录NeuralKG的安装和使用,以及解决windows系统下的运行demo.py出现的问题。

m0_46621271的博客 1397

Chromium编译指南2024 Linux篇-安装官方工具depot_tools(二)

通过配置环境变量,我们确保了系统能够正确识别并调用 depot_tools 中的工具,这为后续的 Chromium 源码管理和编译打下了坚实的基础。在下一节中,我们将详细介绍如何拉取 Chromium 源码,并进行必要的初始设置,以便顺利开始 Chromium 的开发工作。在上一节中,我们已经完成了 Git 的安装,并了解了其在 Chromium 编译过程中的重要性。接下来,我们将继续进行环境的配置,首先是安装和配置 Chromium 编译所需的重要工具——depot_tools。

守城小轩的技术窝棚 2221

TOGAF9.2/10 认证基础知识点概览表

(考点解析:业务场景是一种重要的技术,可以在企业架构的各个阶段使用,主要是架构愿景和业务架构,但如果需要,也可以在其他架构域中使用,以直接从业务的高级需求中派生架构的特征。“哪里”可以看作是对相关企业的界定、“为什么”可以被视为组织环境中的关键驱动因素和要素、“谁”是指确定发起人利益相关者和受业务指令影响的其他主要利益相关者,以创建企业架构,并确定他们来自企业的需求和优先级、他们与企业的关系以及彼此之间所需的工作行为。它是业务驱动和业务主导的,它结 合了所有业务线的必要努力,以实现所需的能力。

2302_81497763的博客 2075

波束形成算法:LCMV实现(MATLAB)

阵列信号处理,波束成形,

weixin_43601588的博客 1万+

Windows下安装depot_tools

Windows下安装depot_tools

崔杰城的博客 3455

pytorch-cifar100学习资料汇总 - 基于PyTorch的CIFAR-100图像分类实践

pytorch-cifar100是一个基于PyTorch实现CIFAR-100数据集图像分类的开源项目。该项目实现了多种经典的深度学习网络模型,如ResNet、DenseNet、VGG等,为开发者提供了在CIFAR-100数据集上进行图像分类实验的代码范例。pytorch-cifar100项目为我们提供了在CIFAR-100数据集上进行图像分类实验的完整代码实现。无论你是想要学习PyTorch的使用,还是研究不同网络模型在CIFAR-100上的表现,这个项目都是一个很好的起点。

helloaiworld的博客 1121

windows10编译与调试webrtc

简单介绍webrtc的下载、编译、调试、更新方法

依依妖妖的林少的博客 3113

保姆级教程:在CentOS 8上用libvirt + QEMU/KVM搭建ARM64虚拟机(含UEFI配置与常见坑点)

本文提供在CentOS 8上使用libvirt + QEMU/KVM搭建ARM64虚拟机的详细教程,涵盖UEFI配置与常见问题解决方案。通过环境准备、特殊配置要点、UEFI固件安装等步骤,帮助用户在x86架构服务器上高效运行ARM64虚拟化环境,特别适合开发测试与跨平台应用场景。

weixin_30292745的博客 129

把 ABAP 选择屏幕 Selection Screen 打造成可维护的交互面板:常用屏幕元素与动态控制全解析

本文详细介绍了ABAP报表中Selection Screen的设计技巧,包括空行(SKIP)、横线(ULINE)、注释(COMMENT)等基础元素的使用方法,以及如何通过MODIF ID实现动态界面调整。重点讲解了行内布局(BEGIN OF LINE)、按钮(PUSHBUTTON)和区块(BLOCK)等高级功能,帮助开发者将选择屏幕从"能用"提升到"好用、易扩展、可维护"的水平。文章还分享了项目实践中的命名规范和分组策略,特别适合需要优化ABAP报表用户体验的开发人员

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 330

Chromium 142 编译指南 Windows篇:depot_tools 安装和配置(三)

摘要:本文详细介绍了获取和配置Chromium编译必需工具depot_tools的过程。depot_tools是Google开发的工具集,包含gclient、git-cl、ninja等核心组件,用于管理Chromium庞大的代码库和依赖关系。文章指导读者通过git克隆获取工具包,强调路径选择和网络要求,并详细说明如何正确配置系统环境变量PATH。最后介绍了初始化验证步骤和常见问题解决方法。完成这些配置后,开发者就具备了获取Chromium142源代码的基础环境。

守城小轩的技术窝棚 1066

全网详细解决Client does not support authentication protocol requested by server;consider upgrading Mysql c

全网详细解决1251 - Client does not support authentication protocol requested by server; consider upgrading Mysql client。

念兮为美 5476

Chromium 134 编译指南 Windows篇:depot_tools 配置(二)

是一套由 Google 开发的命令行工具集,专门用于简化 Chromium 和其他 Google 开源项目的开发流程。gclient:管理项目依赖关系和源代码同步git-cl:代码审核和提交工具ninja:高效的构建系统gn:Chromium 的元构建系统,用于生成 Ninja 构建文件至此,我们已经成功完成了的下载、安装和配置。这套工具是 Chromium 开发过程中至关重要的组件,它为代码库管理、版本控制和代码同步提供了强大的支持。

守城小轩的技术窝棚 1986

CARAFE轻量级上采样算子详解:从原理到YOLOv5/YOLOv8实战魔改全攻略

摘要: 本文探讨了CARAFE(内容感知特征重组)上采样算子在YOLOv5/YOLOv8目标检测模型中的应用。传统上采样方法(如最近邻插值)易丢失细节信息,而CARAFE通过内容自适应机制和大感受野特性,动态生成上采样核,显著提升小目标检测性能。文章详细解析了CARAFE的算法原理(核生成与特征重组两步),并提供了在YOLOv5/YOLOv8中集成的代码实现与配置修改方案。实验表明,引入CARAFE后模型mAP提升约0.6%,且保持轻量级优势。此外,文中还总结了训练调优技巧、部署优化方案及常见问题解决方法,

FJN110的博客 914

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

CEF132 编译指南 Linux 篇 - Chromium 工具集:depot_tools 安装配置(四)

作为 CEF 编译工具链中的重要一环,depot_tools 将帮助开发者高效地管理和更新 CEF 源码,并提供构建所需的必要工具。正确安装和配置 depot_tools 是成功编译 CEF 6834 分支的关键步骤,它为我们提供了强有力的工具支持。在下一篇《CEF132 编译指南 Linux 篇 - 获取 CEF 源代码:源码同步详解(五)》中,我们将介绍如何使用 depot_tools 获取 CEF 6834 分支的源代码,为后续的编译工作奠定坚实的基础。

守城小轩的技术窝棚 1074

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

chromium的部署工具depot_tools和gclient

depot_tools是个工具包,里面包含gclient、gcl、gn和ninja等工具。其中gclient是代码获取工具,它其实是利用了svn和git。

程序的魅力 3万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

win10安装depot_tools

装了半天,吐血了,记录下来希望能帮到点进来看的大家 https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up 在这里下载depot_tools包,根据步骤,记得加入环境变量  C:\workspace\d...

one0_opiece的博客 4393

使用depot_tools下载chromium源码

1、chrome源码目录结构  Chrome source非常庞大,并且在其主目录下还包含有工具和组件,任何一个工具和组件也附带有其源代码。首先得熟悉这些源代码的组织结构,在http://src.chromium.org/svn/中包含如下子目录:releases,曾经发布过的chrome源代码的正式版本;trunk,当前最新的源代码。由于releases中的代码比较旧,这里就不做说明了,只说明

Tumbler 1万+

Chromium 132 编译指南 Windows 篇 - depot_tools 工具的安装与配置 (二)

在下一篇文章中,我们将深入探讨 Chromium 编译所需的各种环境变量配置。这些设置不仅是编译过程的必要条件,还可以帮助您更有效地管理代码库、执行调试和测试,为您的 Chromium 开发之旅提供全方位的支持。在 Chromium 编译指南系列的第一篇中,我们详细介绍了编译前的准备工作和 Visual Studio 的安装流程。是 Chromium 开发过程中至关重要的工具集,它为代码库管理、版本控制和代码同步提供了强大的支持。工具,为您的 Chromium 开发之旅铺平道路。

守城小轩的技术窝棚 1728

Chromium源码学习(1)—— 拉取源码,编译

Chromium项目于2008年发布,作为Google Chrome浏览器的开源部分。Google的Chrome浏览器基于Chromium开发,但添加了Google品牌、自动更新、内置Flash播放器、PDF阅读器等一些闭源的功能和服务。除了Chorm,近几年微软大火的Edge浏览器也是基于Chromium进行开发的。Chromium开源项目有活跃的社区和丰富的学习资源,官方也有详细的开发者文档,涵盖了从环境设置到代码贡献的各个方面。Chromium官方网站。

FBI_BAIGOU的博客 4731
上一篇: 深入解析 Chromium/360 浏览器 WebUI 页面加载机制与资源扩展实战
下一篇: 深入对比:Chromium的base::RefCounted与std::shared_ptr——从线程安全到性能优化
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ปรัชญา แค้วคำมูล

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值