Git子模块修改后被识别为主仓库文件,如何排查问题?
问题原因及解决方法
可能的操作错误
- 子模块未被正确初始化/更新,导致主仓库将
scr视为普通目录而非子模块。比如克隆主仓库后未执行子模块初始化命令,或误删了scr/.git文件(子模块的.git是指向主仓库.git/modules/scr的文件,而非独立目录)。 - 修改子模块文件后,未在子模块内部提交改动,也未回到主仓库更新子模块的引用,导致主仓库直接追踪到子模块内的文件变化。
修复步骤
1. 确保scr被正确识别为子模块
在主仓库根目录执行git status,若输出中显示scr (untracked content),说明子模块状态正常;若显示scr下的具体文件,则需重新初始化子模块:
# 先移除错误的子模块关联 git submodule deinit -f scr # 重新初始化并更新子模块 git submodule init git submodule update
2. 正确提交子模块改动并更新主仓库引用
- 进入子模块目录提交改动:
cd scr git add . git commit -m "提交子模块内的修改" # 如需推送到子模块远程仓库,执行 git push
- 返回主仓库,提交子模块的最新引用:
cd .. git add scr git commit -m "更新scr子模块至最新提交"
完成上述操作后,主仓库的差异将仅显示scr子模块的提交哈希变化,而非子模块内的具体文件改动。
内容的提问来源于stack exchange,提问作者Ezk13
相关产品推荐
相关产品推荐

