如何在主目录与子目录初始化git并解决嵌套仓库文件不显示问题
问题根源
client、server目录下各自存在独立的.git仓库目录,外层主仓库初始化后,会自动将这两个内部有Git仓库的文件夹识别为子模块,仅记录子模块的commit哈希,不会追踪内部的实际文件,因此推送后GitHub仅显示不可点击的文件夹入口。
普通修复方案(不需要保留子仓库原有提交历史)
- 首先删除两个子目录下的Git仓库文件:
# macOS/Linux环境执行 rm -rf client/.git rm -rf server/.git
# Windows cmd环境执行 rd /s /q client\.git rd /s /q server\.git
- 清除外层主仓库缓存中已标记的子模块条目:
git rm --cached client git rm --cached server
- 重新添加两个目录的所有文件到暂存区:
git add client/ server/
- 提交修改后推送即可:
git commit -m "移除嵌套子模块,统一管理前后端代码" git push
可选方案(保留子仓库原有提交历史)
如果需要保留client、server之前的所有Git提交记录,可以使用git subtree能力合并历史到主仓库:
- 先将当前client、server目录备份到其他路径,再删除主仓库下的这两个目录
- 执行命令合并client仓库历史:
git subtree add --prefix=client <client仓库本地路径/远程地址> main
- 执行命令合并server仓库历史:
git subtree add --prefix=server <server仓库本地路径/远程地址> main
- 合并完成后直接推送即可,主仓库会完整保留两个子项目的所有提交记录。
内容的提问来源于stack exchange,提问作者lighdhftr3456
相关产品推荐
相关产品推荐

