git submodule清理异常索引
问题
这个路径已经被 Git 记录过了。
fatal: 'model_files' already exists in the index
注意关键词:index,不是磁盘存在,而是 Git 索引里已经有记录。
解决
1.先确认当前状态
1 | git status |
如果看到 model_files 已经是 submodule,那说明:
- 你之前 add 过
- 或合并过程中留下残留
- 或删除时没清理干净
情况一:目录物理存在但不是 submodule
执行:
1 | git ls-files | grep model_files |
如果输出了路径,说明它只是普通文件被跟踪了。
解决:
1 | git rm -r --cached 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 | git submodule deinit -f model_files |
然后再:
1 | git submodule add git@xxx/ocr_model_files.git model_files |
情况三:你只是切换分支导致 index 残留
有时 merge 冲突会留下半个 submodule 状态。
可以试试:
1 | git reset --hard |
然后再 add。
clone拉取文件
如果你把它当 submodule 引入,每个 clone 主仓库的人都会:
1 | git clone --recurse-submodules |
拉取整个仓库及子仓库代码