DORIS - 执行 git submodule update --init --recursive 的目的是什么?

前言

以前,我们学习源码的时候只需要执行克隆命令即可,如下:
git clone https://github.com/rocky/doris.git
当我学习DORIS的时候,发现执行完上面的命令后,还需要执行如下命令:
git submodule update --init --recursive
所以,进行记录...

场景

某个项目/模块可能会依赖于其他模块或第三方库,项目本身的代码是一个独立的完整的代码仓库,并且不应该把依赖的模块或第三方库的代码直接放到该项目代码库中,但是本地编译的时候又会用到这些依赖的第三方库。
当我们在本地编译的时候,希望在本地能够实现自动的将依赖的模块或第三方库,拉取到该项目指定目录中。
所以,我们可以使用:git submodule 指令。

简介(以下内容来自互联网)

git submodule update --init --recursive
这是一个用于初始化并更新 Git 子模块的命令,其中包含了三个参数:

1. update:

告诉 Git 更新子模块。如果不指定此参数,Git 将不会更新子模块,而只是确保它们处于正确的提交状态。

2. --init:

告诉 Git 初始化尚未初始化的子模块。
如果你的仓库包含子模块,并且有些子模块尚未被初始化(通常是因为它们是在一个最新的版本中添加的),
那么使用这个参数将初始化这些子模块。

3. --recursive:

告诉 Git 递归地初始化和更新所有的子模块。如果子模块本身包含了其他子模块,那么使用这个参数将确保所有子模块都被正确初始化和更新。
因此,git submodule update --init --recursive命令的作用是确保所有子模块都被正确地初始化和更新到仓库中的最新状态。
### 使用 `--recursive` 参数的方法及作用 #### 1. **Git 中的 `--recursive` 参数** `--recursive` 是 Git 提供的一个重要参数,主要用于处理子模块(submodules)。当一个仓库依赖于其他独立的 Git 仓库时,这些外部仓库被称为子模块。为了确保主仓库与其子模块同步更新并正常工作,`--recursive` 参数发挥了重要作用。 - 如果在克隆仓库时使用了 `git clone --recursive <repository-url>` 命令,则会递归地初始化并克隆所有的子模块[^4]。 - 若未使用该参数而仅运行普通的 `git clone`,则只会下载主仓库的内容,而不包含其子模块中的文件。这可能导致后续操作失败,因为缺少必要的资源[^3]。 #### 2. **具体应用场景** 对于某些复杂的开源项目来说,它们可能由多个相互关联的小型库组成。例如 DORIS 数据库系统就需要先完成基础环境搭建后再引入额外组件支持功能扩展;此时如果忽略掉 `--recursive` 配置项就很容易遇到错误提示像 "fatal: No such ref..." 这样的情况发生[^2]。 因此,在实际开发过程中应当养成良好习惯即始终记得加上这个标志位来保障整个工程结构完整无缺: ```bash $ git clone --recursive https://example.com/repo.git ``` 另外值得注意的是,即使已经完成了初始阶段的操作之后再次面对新增加或者修改过的子模块定义表单也需要重新执行相应指令才能生效: ```bash $ git submodule update --init --recursive ``` 此命令能够帮助开发者及时获取最新版次级存储单元内的变动信息以便继续推进下一步骤的工作流程[^5]。 --- ### 示例代码展示 以下是关于如何正确运用 `--recursive` 参数的具体实例演示: 假设存在这样一个名为 MyProject 的大型软件工程项目,并且它内部集成了几个第三方插件作为辅助工具包形式存在的话,那么我们可以按照下面的方式来进行完整的复制过程: ```bash # 正确方式:一次性完全拷贝包括所有子模块在内的全部内容 $ git clone --recursive https://github.com/user/MyProject.git # 错误示范(不推荐): 只能获得顶层目录下的东西而已 $ git clone https://github.com/user/MyProject.git ``` 假如后来得知官方维护者又向其中添加了一些新特性对应的附加模块怎么办呢?没关系,只需简单补充一句就能轻松搞定啦! ```bash # 更新现有的子模块至最新的状态 $ cd MyProject/ $ git pull origin main $ git submodule update --init --recursive ``` 以上步骤可以保证无论何时何地都能保持与上游源一致的状态! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cloneme01

谢谢您的支持与鼓励!

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

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

打赏作者

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

抵扣说明:

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

余额充值