我正在尝试添加一个已经存在的子模块(不同的 git 远程存储库)。由于我之前没有搜索过如何正确执行此操作,所以我认为我弄乱了我的存储库,我需要一些帮助来再次修复它。
我已经从 .gitmodules 和 .git/config 中删除了有关我要删除的子模块的所有相关部分。我还验证了我的 .git/ 目录中没有模块目录。
但是,当我运行命令
git rm --cached path_to_submodule
时,会显示以下消息:
致命:路径规范“path_to_submodule”与任何文件都不匹配
由于上一个命令失败,当我尝试使用新定义再次添加相同的子模块时,运行命令
git submodule add gituser@host:repo.git
,这是显示的消息:
“repo”已存在于索引中
显示消息 (
'repo' already exists in the index
) 的唯一方法是索引中是否仍然存在“repo”(请参阅有关子模块的章节):
$ rm -Rf rack/
$ git submodule add [email protected]:schacon/rack.git rack
'rack' already exists in the index
You have to unstage the rack directory first. Then you can add the submodule:
$ git rm -r rack
$ git submodule add [email protected]:schacon/rack.git rack
即使“
rack
”不是子模块,如果它存在,也会阻止声明同名的子模块。
如果添加新子模块的输出是:
'FolderName' already exists in the index
提示接下来的命令
git ls-files --stage
输出将类似于:
160000 d023657a21c1bf05d0eeaac6218eb5cca8520d16 0 FolderName
然后,删除文件夹索引提示:
git rm -r --cached FolderName
再次尝试添加子模块
可能发生在合并错误、手动删除子模块文件夹或其他情况时,例如 Hallileo Comet
在文件中
.gitmodules
- 删除子模块的链接(带有子模块名称的整个部分)在文件中
.git\config
- 删除子模块的链接,如上一步文件夹中
.git\modules
- 删除相对路径与“问题”模块的相对路径类似的文件夹确保子模块的文件夹不再存在
然后:
$ git submodule add -f --name <name> <git://path_1.git> <path_2>
其中: name - 您希望的子模块名称,可能等于您的
repo
名称; - 子模块源代码库的路径(即 - github 等), - 子模块所在文件夹的相对路径
这允许您在路径中添加子模块或使用仍存在于索引中的名称添加子模块,但不是自然存在的。
我没有找到任何方法从索引中删除这些死链接,但是当被迫时
'submodules/uasdk-clib'已经存在于索引中
git rm -r --缓存子模块/uasdk-clib
git 子模块添加 -b china/release/16.8.0 -f ssh://[电子邮件受保护] submodules/uasdk-clib
这是因为您的存储库中的文件夹与子模块的名称相同
$ git rm -r subModuleName
$ git submodule add "your submodule repo path without these quotes"
再次尝试添加子模块
如果您已经完全删除了子模块,并尝试再次将其添加回来,但您收到一个错误,表明它已存在于索引中……
git update-index --remove path_to_submodule
...将其从索引中删除。然后您应该能够再次添加子模块。