如何将含子目录的文件夹一次性添加到Git并解决嵌入仓库报错
问题原因确认
是的,该警告的触发原因就是所有子目录内部都存在独立的Git仓库(即子目录下有隐藏的.git文件夹),Git识别到嵌套仓库后,默认不会将子目录的实际文件纳入父仓库的追踪范围,只会将其标记为未声明的子模块引用,因此抛出对应提示。
解决方案
根据你是否需要保留子目录的Git提交历史,可选择对应处理方案:
方案1:无需保留子目录Git历史,将所有内容合并到父仓库提交(大多数场景适用)
- 首先撤销已经添加到暂存区的错误记录,在父文件夹下执行:
git rm --cached -r . - 接下来删除所有子目录下的
.git隐藏文件夹,避免嵌套仓库识别,注意不要误删父目录下刚初始化的.git文件夹:- Windows系统在父文件夹CMD中执行:
for /d /r . %d in (.git) do @if exist "%d" rd /s /q "%d" - Mac/Linux系统在父文件夹终端执行:
find . -mindepth 2 -name ".git" -type d -exec rm -rf {} +
- Windows系统在父文件夹CMD中执行:
- 重新执行文件添加操作:
git add . - 后续正常提交推送即可:
git commit -m "初始化仓库,提交所有目录内容" git remote add origin 你的GitHub仓库地址 git push -u origin main
注:如果你的主分支名称为master,将最后一条命令的main替换为master即可
方案2:需要保留子目录各自的Git提交历史,后续单独维护子仓库
使用Git原生的子模块功能管理嵌套仓库即可:
- 为每个子目录执行子模块添加命令,替换为对应子目录自己的远程仓库地址:
git submodule add <子目录对应的GitHub仓库地址> Child_folder_1 - 所有子模块添加完成后,父目录会生成
.gitmodules配置文件,执行提交推送即可:
git add .gitmodules ./* git commit -m "添加所有子模块配置" git push -u origin main
注:后续其他人克隆该父仓库时,需要执行git clone --recursive 父仓库地址才能同时拉取所有子目录的内容
内容的提问来源于stack exchange,提问作者syaifulhusein
相关产品推荐
相关产品推荐

