在.gitmodule中找不到非子模块路径的子模块映射

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

我的.gitmodule文件是这样的:

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

我已经克隆了这个在过去没有错误,(git submodule init后面跟着一个git submodule update),它已经工作了一段时间。

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

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

这个路径只是Xcode中的一个空文件夹,我用它来存放来自另一个目录的项目。它不是.gitmodules文件的一部分,所以我不知道它从哪里得到这个路径。

什么好主意吗?

330860 次浏览

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

如果特殊条目路径.gitmodule中没有被引用(就像原始问题中的'Classes/Support/Three20'一样),那么你需要删除它,以避免出现".gitmodules中没有找到路径的子模块映射"错误消息。

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

git ls-files --stage | grep 160000

之前的回答(2010年11月)

有可能你没有正确地声明你的初始子模块(即没有任何结尾的'/',如我的老答案中所描述的那样,即使你的.gitmodule有看起来不错的路径)。

这个线程提到:

你得到相同的错误时运行'git子模块init'从一个新的克隆?< br > 如果是这样,你就有问题了。< / p > 如果没有子模块,则删除.gitmodules,以及中对子模块的所有引用 .git/config,确保Pikimal目录中没有.git目录 如果这解决了问题,签入并在您的巡航工作副本上做同样的事情。< / p >

显然,不要删除你的主.gitmodules文件,而是在你的工作树中照顾其他额外的.gitmodules文件。


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

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

我为自己解决了这个问题。一开始我是这么做的:

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

事实证明,如果你想克隆主分支,不应该使用——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]

有个问题。有一段时间,我尝试了删除路径的建议,git删除路径,删除.gitmodules,从.git/config中删除条目,重新添加子模块,然后提交并推送更改。这是令人困惑的,因为当我做“git commit -a”时,它看起来没有变化,所以我试着只推删除,然后推读取,使它看起来像一个变化。

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

不知道发生了什么,我猜有人误用了git子模块命令,可能颠倒了参数。甚至可能是我……希望这能帮助到一些人!

我刚刚在尝试“git子模块初始化”后遇到了这个错误,在我的回购的新签出。原来我最初用错误的大小写指定了模块子文件夹。因为我用的是区分大小写的Mac文件系统(hurr),所以它失败了。例如:

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

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

Myapp/Resources/Project

我不明白的是,为什么git将模块初始化到错误的文件夹(忽略我命令中的不正确情况),但随后使用后续命令正确操作(失败)。

在.gitmodules中没有找到路径'OtherLibrary/MKStore'的子模块映射 当< / p >

$ git submodule update --init

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

$ git rm --cached OtherLibrary/MKStore

然后再次更新子模块。它工作得很好。

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

只要git rm subdir就可以了。这将删除作为索引的子目录。

场景:将子模块从目录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. < p > git submodule status运行

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

    尝试git submodule foreach git pull。 我没有对git子模块结构进行实际的研究,所以上面的步骤可能会破坏一些东西。尽管如此,经过上述步骤,目前情况看起来不错。如果你有什么见解或正确的方法,请在这里分享。李:)< / p > < / >

当我使用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

我的场景是我错误地应用了包含.文件夹的项目目录 SourceTree认为这个文件夹是git的子模块,但实际上不是。< / p >

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

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

清除git中的垃圾并保持清洁。

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

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

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

.gitmodules文件中,我替换了string

"path = thirdsrc\boost"

"path = thirdsrc/boost",

问题解决了!- -

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

文件夹映射可以在.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子模块

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

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

值得注意的是,git 1.7.1给出了“没有子模块映射”的错误,但git 2.13.0似乎并不在意。

如果你有:

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

你还是会得到错误,解决这个问题的方法是读回子模块原来所在的空文件夹。你可以这样做:

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

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

我解决了删除回购和运行这个命令

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

在那之后,它对我来说工作得很好,因为这里没有一个选项是有用的

它的作用是:

  1. 克隆主回购
  2. 在克隆完成后立即初始化子模块

就是这样

你可以在下面这个链接找到更多信息

Submodules

fatal:没有找到子模块路径的url 'path/to/submodule' 在.gitmodules中没有找到路径'path/to/submodule'

的子模块映射

这些错误开始于我quot;cd"一次是从根目录文件夹到。/resources/css/style.css。

我使用了style.css中的git init,在我已经添加后意识到我的错误 git add remote origin <url> . < / p >

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

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

最终,在对根目录执行git init后,将其添加到remote, resources/css路径提供了上面列出的子模块error/fatal errors。因此,从根目录,在git bash中,我键入git rm --cached resources/css,删除css目录(保存代码),推送更改,并在不同的分支(可选)中添加css目录和styles.css文件,以查看再次推送更改并在github页面上检查部署后的结果。它工作!我知道删除目录并不总是理想的,特别是在大型项目中,但只是想分享另一种解决这个问题的方法!

< p > p。S相当新的stackoverflow,所以我为冗长的文本道歉。 # 2022回答< / p >

文件夹结构

xyz folder as root directory which contains 2 folder as submodule
-- product
-- user

从根目录执行以下命令

git rm --cached product/
git rm --cached user/

进入产品目录并执行

 git submodule update --init

进入用户目录并执行

git submodule update --init

再次进入根目录CD ..

git add --all