32

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

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

但是,当我运行命令时git rm --cached path_to_submodule,会显示以下消息:

致命:pathspec 'path_to_submodule' 不匹配任何文件

由于上一个命令失败,当我尝试使用新定义再次添加相同的子模块时,运行命令git submodule add gituser@host:repo.git,这是显示的消息:

'repo' 已存在于索引中
4

5 回答 5

66

可以显示消息 () 的唯一方法'repo' already exists in the index是索引中仍然存在“repo”(请参阅​​关于子模块的本章):

$ rm -Rf rack/
$ git submodule add git@github.com: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 git@github.com:schacon/rack.git rack

即使 ' rack' 不是子模块,如果它存在,它也会阻止同名子模块的声明。

于 2012-08-31T16:07:23.223 回答
12

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

'FolderName' already exists in the index

提示下一个命令

git ls-files --stage 

输出将类似于:

160000 d023657a21c1bf05d0eeaac6218eb5cca8520d16  0  FolderName

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

git rm -r --cached FolderName

再次尝试添加子模块

于 2016-09-26T14:37:28.267 回答
3

合并错误、手动删除子模块文件夹或其他东西(如 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 等), - 子模块所在文件夹的相对路径

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

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

于 2016-08-28T09:03:01.380 回答
1

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

git rm -r --cached 子模块/uasdk-clib

git submodule add -b china/release/16.8.0 -f ssh://git@xxx-ios-uasdk.git submodules/uasdk-clib

于 2016-12-29T04:14:30.920 回答
0

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

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

再次尝试添加子模块

于 2019-10-16T07:54:42.033 回答