添加无法从索引中删除的子模块

问题描述 投票:0回答:6

我正在尝试添加一个已经存在的子模块(不同的 git 远程存储库)。由于我之前没有搜索过如何正确执行此操作,所以我认为我弄乱了我的存储库,我需要一些帮助来再次修复它。

我已经从 .gitmodules 和 .git/config 中删除了有关我要删除的子模块的所有相关部分。我还验证了我的 .git/ 目录中没有模块目录。

但是,当我运行命令

git rm --cached path_to_submodule
时,会显示以下消息:

致命:路径规范“path_to_submodule”与任何文件都不匹配

由于上一个命令失败,当我尝试使用新定义再次添加相同的子模块时,运行命令

git submodule add gituser@host:repo.git
,这是显示的消息:

“repo”已存在于索引中
git git-submodules
6个回答
69
投票

显示消息 (

'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
”不是子模块,如果它存在,也会阻止声明同名的子模块。


14
投票

如果添加新子模块的输出是:

'FolderName' already exists in the index

提示接下来的命令

git ls-files --stage 

输出将类似于:

160000 d023657a21c1bf05d0eeaac6218eb5cca8520d16  0  FolderName

然后,删除文件夹索引提示:

git rm -r --cached FolderName

再次尝试添加子模块


4
投票

可能发生在合并错误、手动删除子模块文件夹或其他情况时,例如 Hallileo Comet

  1. 在文件中

    .gitmodules
    - 删除子模块的链接(带有子模块名称的整个部分)

  2. 在文件中

    .git\config
    - 删除子模块的链接,如上一步

  3. 文件夹中

    .git\modules
    - 删除相对路径与“问题”模块的相对路径类似的文件夹

  4. 确保子模块的文件夹不再存在

  5. 然后:

    
    $ git submodule add -f --name <name> <git://path_1.git> <path_2>
    

    其中: name - 您希望的子模块名称,可能等于您的

    repo
    名称; - 子模块源代码库的路径(即 - github 等), - 子模块所在文件夹的相对路径

    这允许您在路径中添加子模块或使用仍存在于索引中的名称添加子模块,但不是自然存在的。

我没有找到任何方法从索引中删除这些死链接,但是当被迫时


1
投票

'submodules/uasdk-clib'已经存在于索引中

git rm -r --缓存子模块/uasdk-clib

git 子模块添加 -b china/release/16.8.0 -f ssh://[电子邮件受保护] submodules/uasdk-clib


1
投票

这是因为您的存储库中的文件夹与子模块的名称相同

$ git rm -r subModuleName
$ git submodule add "your submodule repo path without these quotes"

再次尝试添加子模块


0
投票

如果您已经完全删除了子模块,并尝试再次将其添加回来,但您收到一个错误,表明它已存在于索引中……

git update-index --remove path_to_submodule

...将其从索引中删除。然后您应该能够再次添加子模块。

© www.soinside.com 2019 - 2024. All rights reserved.