git使用之--------SubModule的使用

本文介绍了git submodule的使用,前提是有主项目和module项目且主项目依赖module项目。使用它可使项目结构清晰、模块化,便于维护。还介绍了命令行和sourcetree两种使用方式,包括添加、删除子模块及拉取代码等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,前提


使用git submodule的前提是有两个git项目一个主项目,一个module项目,而且主项目需要依赖于module项目。实际使用情况大致如此,当然这个module可能会被几个不同的项目依赖,但是也是也都是 主项目-module项目 模式。

2,使用的优点

  1. 项目结构更加清晰,项目模块化
  2. 当存在多个项目需要依赖同一个module的时候,只需要维护一份module

3,git使用有命令行和图形界面,此处介绍sourcetree和命令行

         命令行

在主项目的某一个目录下面,例如下面目录

  • 此处有一个项目DFSubModuleTest,项目下面有一个目录Android,在此处执行:

       git submodule add --force git@git.corp.hanlz.com:hanlz/DFSubModule.git ./module

       git submodule add --force <url> <path>

      其中 git@git.corp.hanlz.com:hanlz/DFSubModule.git    是module项目的url地址,后面module使用的相对路径 ./module

  • 执行结果

       出现了子目录module,这个目录就是module项目DFSubModule,

       此时module项目完成,然后主项目和module项目都是单独使用git维护,比如切换分支

添加module之后主项目需要提交代码,git status查看修改记录(后面删除submodule会使用)

 

以后每次module项目有跟新之后,需要在module项目中git pull拉取最新的代码。

         删除module项目

  1. rm -rf 子模块目录 删除子模块目录及源码
  2. 打开 .gitmodules 删除项目目录下.gitmodules文件中子模块相关条目
  3. 打开 .git/config 删除配置项中子模块相关条目
  4. rm .git/module/* 删除模块下的子模块目录,每个子模块对应一个目录,注意只删除对应的子模块目录即可

4,拉取代码之后,拉取module

  • git submodule init 初始化子模块
  • git submodule update 更新子模块
  • git submodule foreach git pull 拉取所有子模块

sourcetree

1,此处有一个项目DFSubModuleTest,项目下面有一个目录Android,sourcetree如下

 

然后有一个子模块:git@git.corp.hanlz.com:hanlz/DFSubModule.git

点击仓库,然后点击添加子模块,出现添加子模块的clone路径,和本地存放路径,

      源路径/URL写入子模块路径,本地相对路径写入想将字模块放入的位置,加入放入capi,则如下:

 

点击确定,可以看到子模块已经成功依赖,子模块依赖的配置也已经自动完成,如下所示即为成功:

    提交一次commit即可

此时子模块和普通的git项目并无区别,提交commit,reset,分支等完全一致,双击对应的子模块就能进入子模块管理界面

 

### 如何使用 `git submodule update --remote` 更新子模块到最新版本 为了确保 Git 子模块能够同步远程仓库中的最新更改,可以使用命令 `git submodule update --remote`。此命令的作用是从远程仓库拉取最新的提交记录并将其应用到当前的子模块中[^2]。 以下是实现这一目标的具体方法: #### 使用场景说明 如果主仓库依赖的某个子模块发生了更新(例如开发者向该子模块推送了新的修改),那么可以通过运行以下命令来获取这些更新: ```bash git submodule update --remote ``` 这条指令会遍历所有的子模块,并尝试从各自的上游分支抓取最新的改动[^3]。 #### 结合初始化操作 对于首次克隆下来的项目来说,在执行上述命令之前可能还需要先完成子模块的初始化工作。这一步骤可通过下面两条命令达成: - 首次初始化所有已定义好的子模块结构但不下载具体内容: ```bash git submodule init ``` - 接着实际下载各子模块对应的数据至本地目录下: ```bash git submodule update ``` 之后再利用带有参数`--remote`选项的形式去进一步升级各个组件为它们各自远端服务器上的最前沿状态。 #### 自动化流程脚本示例 也可以编写一个小脚本来简化整个过程: ```bash #!/bin/bash echo "Initializing submodules..." git submodule init echo "Updating submodules without fetching latest changes first..." git submodule update echo "Now pulling the very newest commits from remotes within each submodule." git submodule foreach 'git pull origin $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo main)' ``` 注意这里假设默认分支名称可能是'main'或其他自定义命名而非传统意义上的master,请依据实际情况调整相应部分代码逻辑。 通过以上方式即可成功让您的Git管理下的项目始终保持与外部资源库之间的紧密联系,及时反映任何重要的改进成果!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值