[每周一更]-(第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
    
相关推荐
{⌐■_■}4 小时前
【git】工作流实战:从本地仓库到远程仓库,git pull 与git rebase使用讲解,案例解析
git
大溪地C8 小时前
Git 合并冲突解决与状态分析笔记
笔记·git
CsbLanca9 小时前
Git配置个人和公司的提交信息,通过‘目录配置‘
git
娶个名字趴9 小时前
Git企业开发
git
fruge17 小时前
git上传 项目 把node_modules也上传至仓库了,在文件.gitignore 中忽略node_modules 依然不行
大数据·git·elasticsearch
_OMG_18 小时前
Git 高效同步远程分支与本地分支清理技巧
git
心无旁骛~18 小时前
Git笔记汇总,持续更新~
笔记·git
{⌐■_■}1 天前
【git】工作场景下的 工作区 <-> 暂存区<-> 本地仓库 命令实战 具体案例
大数据·git·elasticsearch·golang·iphone·ip·etcd
李狗蛋儿啊1 天前
zero自动化框架搭建---Git安装详解
运维·git·自动化
人工干智能1 天前
科普:“git“与“github“
git·github