375

我有一个项目,其中有一个子模块lib/three20

我的.gitmodule文件如下所示:

[submodule "lib/three20"]
    path = lib/three20
    url = git://github.com/facebook/three20.git

我过去已经克隆了它而没有错误,(git submodule init后跟 a git submodule update)并且它已经工作了一段时间。

我试图将它克隆到一台新机器上,现在我得到了这个错误git submodule init

No submodule mapping found in .gitmodules for path 'Classes/Support/Three20'

该路径只是 Xcode 中的一个空文件夹,我用来存放其他目录中的项目。它不是.gitmodules文件的一部分,所以我看不出它是从哪里获得这条路径的。

有任何想法吗?

4

17 回答 17

453

在 .gitmodules 中找不到路径“OtherLibrary/MKStore”的子模块映射

$ git submodule update --init

我不知道为什么会发生错误。花了一分钟后,在stackoverflow中找到了答案。

$ git rm --cached OtherLibrary/MKStore

然后再次更新子模块。它工作正常。

http://en.saturngod.net/no-submodule-mapping-found-in-gitmodules

于 2012-11-15T09:36:21.253 回答
348

rajibchowdhury回答(赞成)之后,建议使用git rm命令删除索引中指示子模块的特殊条目(具有特殊模式的“文件夹” 160000)。

如果在(如原始问题中的 ' ')中未引用该特殊条目路径,则需要将其删除,以避免出现“ No submodule mapping found in for path ”错误消息。.gitmoduleClasses/Support/Three20.gitmodules

您可以检查索引中引用子模块的所有条目:

git ls-files --stage | grep 160000

上一个答案(2010 年 11 月)

您可能没有正确声明您的初始子模块(即最后没有任何尾部“/”,如我的旧答案中所述,即使您.gitmodule的路径看起来不错)。

该线程提到:

从新克隆运行“git submodule init”时是否遇到相同的错误?
如果是这样,那么您有问题。

如果您没有子模块,请删除.gitmodules.git/config 中对子模块的任何引用,并确保 Pikimal 目录中没有.git目录。
如果这样可以解决问题,请检查并在您的巡航工作副本上执行相同的操作。

显然,不要删除您的主.gitmodules文件,而要注意工作树中的其他额外.gitmodules文件。


仍然在“不正确的子模块初始化”主题中,Jefromi提到了实际上是 gitlinks 的子模块。

请参阅如何跟踪未跟踪的内容?为了将这样的目录转换为真正的子模块。

于 2010-11-15T14:58:48.740 回答
24

当我使用 SourceTree 做这些事情时,它会吐出这条消息。
我遇到的消息:

git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree submodule update --init --recursive
No submodule mapping found in .gitmodules for path 'SampleProject/SampleProject'
Completed with errors, see above

我的情况是我误用了包含.git文件夹的项目目录。
SourceTree 将此文件夹视为 git 子模块,但实际上并非如此。

我的解决方案是使用命令行来删除它。

$ git rm -r SampleProject --cached
$ git commit -m "clean up folders"

清除 git 中的垃圾并保持干净。

于 2014-11-19T10:39:16.413 回答
17

我为我解决了这个问题。最初我试图这样做:

git submodule add --branch master [URL] [PATH_TO_SUBMODULE]

事实证明,如果要克隆 master 分支,则不应使用 --branch 选项的规范。它抛出这个错误:

fatal: Cannot force update the current branch.
Unable to checkout submodule '[PATH_TO_SUBMODULE]'

每次你尝试做一个

git submodule sync

将抛出此错误:

No submodule mapping found in .gitmodules for path '[PATH_TO_SUBMODULE]'

并且 .gitmodules 中需要的行永远不会添加。

所以对我来说解决方案是这样的:

git submodule add [URL] [PATH_TO_SUBMODULE]
于 2012-02-22T09:12:31.330 回答
11

在文件.gitmodules中,我替换了字符串

"path = thirdsrc\boost" 

"path = thirdsrc/boost", 

它解决了!- -

于 2015-09-10T10:19:50.770 回答
10

在我的 repo 的新结帐时尝试“git submodule init”后,我刚刚遇到了这个错误。原来我最初用错误的大小写指定了模块子文件夹。由于我使用的是具有区分大小写的文件系统(hurr)的 Mac,因此它失败了。例如:

git submodule add git@github.com:user/project.git MyApp/Resources/Project
Cloning into 'MyApp/Resources/Project'

成功,但问题是磁盘上的路径是

Myapp/Resources/Project

我不明白为什么 git 将模块初始化到错误的文件夹(忽略我的命令中不正确的大小写)但随后使用后续命令正确运行(通过失败)。

于 2012-07-13T16:07:59.670 回答
7

git rm subdir 好的。这将删除子目录作为索引。

于 2013-01-23T06:47:38.727 回答
5

刚遇到这个问题。有一段时间,我尝试了有关删除路径的建议,git 删除路径,删除 .gitmodules,从 .git/config 中删除条目,添加子模块,然后提交并推送更改。这令人费解,因为当我执行“git commit -a”时它看起来没有任何变化,所以我尝试只推动删除,然后推动 readdition 使其看起来像一个变化。

过了一会儿,我偶然注意到,在删除所有内容后,如果我运行“git submodule update --init”,它会显示一条关于 git 不应再引用的特定名称的消息:存储库的名称子模块正在链接到,而不是它正在检查的路径名。Grepping 透露此参考位于 .git/index 中。所以我运行了“git rm --cached repo-name”,然后读取了模块。当我这次提交时,提交消息包含一个更改,即它正在删除这个意外对象。之后它工作正常。

不知道发生了什么,我猜有人滥用了 git submodule 命令,可能是颠倒了参数。甚至可能是我......希望这可以帮助某人!

于 2012-06-22T18:25:37.907 回答
5

文件夹映射可以在.git/modules文件夹中找到(每个config文件夹都有引用其的文件worktree),因此请确保这些文件夹与 和 中的配置相对.gitmodules.git/config

所以.gitmodules有正确的路径:

[submodule "<path>"]
  path = <path>
  url = git@github.com:foo/bar.git

在部分中.git/modules/<path>/config[core]您有正确的路径<path>,例如

[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  worktree = ../../../<path>

如果.git/modules缺少正确的文件夹,那么您必须转到您的子模块目录并尝试git reset HEAD --hardgit checkout master -f. 如果这没有帮助,您可能希望删除对损坏的子模块的所有引用并再次添加它,然后请参阅:重命名 git 子模块

于 2016-02-28T17:14:33.893 回答
3

场景:将子模块从目录 dirA-xxx 更改为另一个目录 dirB-xxx

  1. 将 dirA-xxx 移动到 dirB-xxx
  2. 修改 .gitmodules 中的条目以使用 dirB-xxx
  3. 修改 .git/config 中的条目以使用 dirB-xxx
  4. 修改 .git/modules/dirA-xxx/config 以反映正确的目录
  5. 修改 dirA-xxx/.git 以反映正确的目录
  6. git submodule status

    如果返回错误:在 .gitmodules 中找不到路径 dirA-xxx 的子模块映射。这是因为 dirA-xxx 不存在,但它仍然被 git 跟踪。通过以下方式更新 git 索引:git rm --cached dirA-xxx

    尝试使用git submodule foreach git pull. 我没有通过 git 子模块结构的实际研究,所以上面的步骤可能会破坏一些东西。尽管如此,通过上述步骤,目前情况看起来不错。如果您有任何见解或适当的步骤来完成工作,请在此处分享。:)

于 2014-02-06T09:27:38.583 回答
2

如果你有:

  • 使用简单的rm而不是删除子模块git rm
  • 删除了对子模块的引用.gitmodules
  • 删除了.git/config;中的引用

而且您仍然遇到错误,为我解决的问题是读回子模块曾经所在的空文件夹。你可以这样做:

mkdir -p path/to/your/submodule
touch path/to/your/submodule/.keep

.keep只是一个空文件。git commit它和错误应该消失。

于 2020-08-30T14:41:00.073 回答
1

通常,git 在项目的根目录 (.git/) 中创建一个隐藏目录

当您在 CMS 上工作时,您可以安装带有 .git/ 目录的模块/插件,其中包含特定模块/插件的 git 元数据

最快的解决方案是查找所有 .git 目录并仅保留您的根 git 元数据目录。如果这样做,git 不会将这些模块视为项目子模块。

于 2015-01-13T09:30:09.107 回答
1

在查看了我的 后.gitmodules,发现我确实有一个不应该有的大写字母。所以请记住,.gitmodules目录区分大小写

于 2016-02-04T17:30:22.207 回答
1

我解决了删除 repo 并运行这个命令

git clone --recurse-submodules https://github.com/chaconinc/MainProject

在那之后它对我来说很好,因为这里的选项都没有帮助

它的作用是:

  1. 克隆主仓库
  2. 克隆完成后立即初始化子模块

就是这样

您可以在下面的此链接上找到更多信息

子模块

于 2021-10-15T05:01:43.643 回答
0

在我的情况下,错误可能是由于具有不同子模块配置的两个分支上的 .gitmodules 之间的不正确合并。在听取了这个论坛的建议后,我解决了手动编辑 .gitmodules 文件的问题,添加缺少的子模块条目非常容易。之后,命令 git submodule update --init --recursive 没有问题。

于 2016-04-25T16:11:53.440 回答
0

我们的问题是重复的子模块条目已添加到 .gitmodules 中(可能来自合并)。我们在 .gitmodules 中搜索了 git 抱怨的路径,发现了两个相同的部分。删除其中一个部分为我们解决了问题。

对于它的价值,git 1.7.1 给出了“无子模块映射”错误,但 git 2.13.0 似乎并不关心。

于 2017-10-06T19:17:03.420 回答
0

致命:找不到子模块路径'path/to/submodule'的url 在.gitmodules中找不到路径'path/to/submodule'的子模块映射

当我从根目录文件夹“cd”一次到 ./resources/css/style.css 时,这些错误就开始了。

git init从 style.css 中使用,在添加 git add remote origin <url>.

所以,仍然在 git bash 的 style.css 文件中,我使用了git remove remote origin.

当我检查git remote时,远程链接已被删除。

最终,在git init完成根目录之后,将其添加到远程,资源/css 路径提供了顶部列出的子模块错误/致命错误。因此,从根目录,在 git bash 中,我键入git rm --cached resources/css,删除 css 目录(保存代码),推送更改,并在其中添加一个 css 目录和 styles.css 文件到不同的分支(可选),看看如何结果将是在再次推送更改并检查 github 页面上的部署之后。有效!我知道删除目录并不总是理想的,尤其是在大型项目中,但只是想分享另一种解决此问题的方法!

PS对stackoverflow来说相当新,所以我为冗长的文字道歉。第2022章 答案

于 2022-02-23T16:10:57.330 回答