git submodule清理异常索引

问题

这个路径已经被 Git 记录过了。

fatal: 'model_files' already exists in the index

注意关键词:index,不是磁盘存在,而是 Git 索引里已经有记录。

解决

1.先确认当前状态

1
2
git status
git submodule status

如果看到 model_files 已经是 submodule,那说明:

  • 你之前 add 过
  • 或合并过程中留下残留
  • 或删除时没清理干净

情况一:目录物理存在但不是 submodule

执行:

1
git ls-files | grep model_files

如果输出了路径,说明它只是普通文件被跟踪了。

解决:

1
2
git rm -r --cached model_files
rm -rf model_files

然后重新加:

1
git submodule add git@xxx/ocr_model_files.git model_files

情况二:它已经是 submodule但配置残留

检查:

1
cat .gitmodules

如果里面有:

[submodule "model_files"]
    path = model_files

说明 Git 认为它存在,彻底清理流程

1
2
3
git submodule deinit -f model_files
git rm -f model_files
rm -rf .git/modules/model_files

然后再:

1
git submodule add git@xxx/ocr_model_files.git model_files

情况三:你只是切换分支导致 index 残留

有时 merge 冲突会留下半个 submodule 状态。

可以试试:

1
2
git reset --hard
git clean -fd

然后再 add。


clone拉取文件

如果你把它当 submodule 引入,每个 clone 主仓库的人都会:

1
git clone --recurse-submodules

拉取整个仓库及子仓库代码