[每周一更]-(第103期):GIT初始化子模块

文章目录

该问题的缘由是因为:在写某些代码的时候,仓库中有些文件夹,只提交了文件夹名称到git仓库中,但是发现该文件夹下的文件没有在git中记录到,才发现有此类问题;

常规操作一下可以解决:(如果存在其他情况就类似)

复制代码
 git rm --cached directory
 git add directory

如果想确定其他项目中是否有类似问题,可以进行如下命令验证;

报错如下的话:fatal: No url found for submodule path 'study-go/jike/101' in .gitmodules,那就是有问题了,需要具体文件排查;一般是因为引入了其他有.git记录的子项目引起的,删除对应的.git,并删除缓存,再添加即可;

如果看具体仓库终会有如下展示文件夹(表示101该文件夹下的文件都没有被仓库记录下来,并且只能找原来物理存储的101文件夹内容,并处理,如果找不到那就是文件丢失了~~,找原仓库即可):

复制代码
 101 @ 212851b

要初始化和更新所有子模块,可以使用以下Git命令。这些命令将确保所有子模块被正确初始化并更新到最新版本。

初始化和更新所有子模块

  1. 初始化所有子模块

    首次克隆包含子模块的仓库后,需要初始化子模块。这一步会读取 .gitmodules 文件中的配置,并在相应路径初始化子模块。

    复制代码
    git submodule update --init --recursive
  2. 更新所有子模块

    更新子模块到它们各自的最新提交状态:

    复制代码
    git submodule update --recursive --remote

分步骤操作

1. 克隆包含子模块的仓库

当你克隆一个包含子模块的仓库时,需要使用 --recurse-submodules 选项,这样在克隆主仓库的同时会自动初始化和更新子模块。

复制代码
git clone --recurse-submodules <repository-url>

如果你已经克隆了仓库而没有使用 --recurse-submodules 选项,可以手动初始化和更新子模块。

2. 初始化子模块

在已经克隆的仓库目录中,运行以下命令初始化子模块:

复制代码
git submodule update --init --recursive

这条命令会递归地初始化所有子模块及其嵌套的子模块。

3. 更新子模块

为了确保所有子模块都更新到最新的提交,可以使用以下命令:

复制代码
git submodule update --recursive --remote

这条命令会更新所有子模块及其嵌套子模块到它们各自的最新提交状态。

查看子模块状态

要查看所有子模块的状态,可以使用 git submodule status 命令:

复制代码
git submodule status

这条命令会显示子模块的当前提交哈希值和路径。

提交子模块的更改

如果你在子模块中进行了更改,需要在子模块目录中提交这些更改,然后在主仓库中更新子模块的引用。

  1. 进入子模块目录并提交更改

    复制代码
    cd path/to/submodule
    git add .
    git commit -m "Commit message for submodule changes"
    git push
    cd -
  2. 在主仓库中更新子模块引用

    复制代码
    git add path/to/submodule
    git commit -m "Update submodule reference"
    git push

处理子模块路径错误的问题

如果你遇到子模块路径错误,例如 fatal: no submodule mapping found in .gitmodules for path 'path/to/submodule',可以通过以下步骤解决:

  1. 编辑 .gitmodules 文件

    确保 .gitmodules 文件中包含所有子模块的正确配置信息。

    复制代码
    [submodule "path/to/submodule"]
        path = path/to/submodule
        url = <submodule-repository-url>
  2. 添加子模块配置到 .gitmodules

    如果 .gitmodules 文件中缺少子模块配置,可以手动添加:

    复制代码
    git submodule add <submodule-repository-url> path/to/submodule
  3. 重新初始化和更新子模块

    复制代码
    git submodule update --init --recursive
相关推荐
蓝色空白的博客1 天前
Git代码下拉更新推送操作用法整理
git
风也温柔☆1 天前
IDEA/WebStorm 切换分支(超简单)
git·intellij-idea·webstorm·切换分支·checkout
Jammingpro1 天前
【Git版本控制】Git初识、安装、仓库初始化与仓库配置(含git init、git config与配置无法取消问题)
java·git·elasticsearch
shark2 天前
无需放弃变更、关闭占用程序!用暂存区和 git底层命令实现 Git 变更备份
git·shell·自动化运维
_poplar_2 天前
15 【C++11 新特性】统一的列表初始化和变量类型推导
开发语言·数据结构·c++·git·算法
北城笑笑2 天前
Git 10 ,使用 SSH 提升 Git 操作速度实践指南( Git 拉取推送响应慢 )
前端·git·ssh
蓁蓁啊2 天前
GIT使用SSH 多账户配置
运维·git·ssh
相与还2 天前
IDEA和GIT实现cherry pick拣选部分变更到新分支
git·elasticsearch·intellij-idea
刘志辉3 天前
git指令
git
2501_916766543 天前
【Git学习】初识git:简单介绍及安装流程
git·学习