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
文件的一部分,所以我看不到它从何处获得此路径。有什么想法吗?
#1 楼
按照rajibchowdhury的答案(已投票),请使用git rm
命令,建议该命令用于删除索引中指示子模块的特殊条目(带有特殊模式160000
的“文件夹”)。 如果在
.gitmodule
中未引用该特殊输入路径(例如原始问题中的'Classes/Support/Three20
'),则需要将其删除,以避免“在.gitmodules
中找不到子模块映射for path”错误消息。您可以检查索引中引用子模块的所有条目:
git ls-files --stage | grep 160000
上一个答案(2010年11月)
您可能没有正确声明初始子模块(即,如我的旧答案中所述,最后没有任何尾部'/',即使您的
.gitmodule
已看起来不错的路径)。该线程提到:
从新克隆运行'git submodule init'时是否遇到相同的错误?
如果是这样,则说明您有问题。
如果没有子模块,请删除
.gitmodules
,并删除.git / config中所有子模块的引用,并确保Pikimal目录中没有
.git
目录。如果这样可以解决问题,请签入并在邮轮工作副本上进行相同的操作。 显然,不要删除主要的
.gitmodules
文件,但要照顾工作树中的其他.gitmodules
文件。在“不正确的子模块初始化”主题中,Jefromi提到了实际上是gitlinks的子模块。
请参阅如何跟踪未跟踪的内容?为了将这样的目录转换为真实的子模块。
评论
我没有任何.gitmodules文件,每次结帐/拉取时我仍然收到此消息。我该怎么办?
–aaronbauman
17 Mar 17 '17 at 14:33
在这里找到我的答案:stackoverflow.com/questions/14720034/…
–aaronbauman
17 Mar 17 '17 at 14:42
@aaronbauman是的,您需要删除gitlink,因此git rm xxx(不带斜杠)git rm --cached允许您将其保留在磁盘上,同时将其从索引中删除。
–VonC
17年3月17日在15:00
运行git ls-files之后--stage | grep 16000,我发现了一些条目。如何删除这些?
–约翰·麦克
17年9月9日13:57
@JohnMike,如果您有引用这些条目的.gitmodule,则请使用stackoverflow.com/a/16162000/6309。如果没有,一个简单的git rm文件夹(没有尾随/斜杠)
–VonC
17年11月9日在13:59
#2 楼
在.gitmodules中找不到路径'OtherLibrary / MKStore'的子模块映射。$ git submodule update --init
我不知道为什么会发生错误。花一分钟后,在stackoverflow中找到答案。
$ git rm --cached OtherLibrary/MKStore
,然后再次更新子模块。它工作正常。
http://en.saturngod.net/no-submodule-mapping-found-in-gitmodules
评论
在编辑.gitmodules文件以通过git://链接更改https://链接后,它对我有用
– Diwann
13年6月18日在12:24
这对我也同样有效,但是我必须确保子模块路径的末尾没有斜杠。
–彼得
2014年3月27日在16:45
我不敢相信我忘记了init选项。如果克隆项目,则应先启动子模块,然后再更新它们。
– alex
15年4月20日在13:46
不得不在仓库的根目录中运行它,然后一切正常。谢谢!
– Pwdr
2015年10月20日在20:13
非常感谢您的rm命令。我叫git submodule sync | grep“找到映射”,然后git rm和再次git子模块同步。问题消失了!
–nine9five
16-3-14在12:26
#3 楼
当我使用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中的垃圾并保持干净。
#4 楼
我为我解决了这个问题。最初,我尝试这样做: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]
#5 楼
我在尝试对我的仓库进行新的签出后尝试“ git submodule init”后遇到了这个错误。原来,我最初用错误的情况指定了模块子文件夹。因为我在Mac上使用区分大小写的文件系统(hurr),所以它失败了。例如:git submodule add git@github.com:user/project.git MyApp/Resources/Project
Cloning into 'MyApp/Resources/Project'
成功,但是问题在于磁盘上的路径是
Myapp/Resources/Project
不明白的是为什么git会将模块初始化到错误的文件夹(忽略我的命令中的错误情况),然后随后的命令正确运行(失败)。
评论
在这里也一样(Windows),尽管我不明白为什么。您应该可以自由地为结帐指定一个带有不同大小写的文件夹,并且这不会更改模块名称。
– Xavier Poinas
15年5月6日在16:12
#6 楼
在.gitmodules文件中,我将字符串"path = thirdsrc\boost"
替换为
"path = thirdsrc/boost",
,它解决了! --
评论
谢谢解决我的问题。可能是在Windows中发生的问题。在我的情况下,路径为“ path = something \\ folder”
– Roozbeh G
16年1月31日在18:55
当我在Windows上使用git-lfs而不是git时遇到错误时,这对我有用。 (使用标准git时未发生错误)
–碎片
18年11月14日在0:14
#7 楼
只需git rm subdir
就可以了。将会删除子目录作为索引。#8 楼
刚遇到这个问题。有一段时间,我尝试了有关删除路径,git删除路径,删除.gitmodules,从.git / config中删除条目,重新添加子模块,然后提交并推送更改的建议。令人费解的是,当我执行“ git commit -a”时看起来没有任何变化,因此我尝试仅推动移除,然后推动readdition使它看起来像是变化。一段时间后,我偶然地注意到,删除所有内容后,如果我运行“ git submodule update --init”,则会收到一条消息,提示有关git不再应该引用的特定名称:子模块链接到的存储库的名称,而不是它签出到的路径名。 Grepping发现此引用位于.git / index中。所以我运行了“ git rm --cached repo-name”,然后读取了模块。当我这次提交时,提交消息包含一个更改,即它正在删除此意外对象。之后,它可以正常工作。
不知道发生了什么,我猜是有人滥用了git submodule命令,也许反转了参数。甚至可能是我...希望这对某人有帮助!
#9 楼
文件夹映射可以在.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 --hard
或git checkout master -f
。如果这样做没有帮助,则可能要删除对损坏的子模块的所有引用,然后再次添加它,然后参阅:重命名git子模块。#10 楼
方案:将子模块从目录dirA-xxx更改为另一个目录dirB-xxx将dirA-xxx移至dirB-xxx
修改.gitmodules中的条目以使用dirB- xxx
修改.git / config中的条目以使用dirB-xxx
修改.git / modules / dirA-xxx / config来反映正确的目录
修改dirA-xxx / .git来反映正确的目录
运行
git submodule status
如果返回错误:在.gitmodules中找不到路径dirA-xxx的子模块映射。这是由于dirA-xxx不存在,但仍由git跟踪。通过以下方法更新git索引:
git rm --cached dirA-xxx
尝试使用
git submodule foreach git pull
。我没有对git子模块结构进行实际研究,因此上述步骤可能会破坏某些内容。尽管如此,通过上述步骤,目前情况看起来不错。如果您有任何见解或适当的步骤来完成任务,请在此处分享。 :)
#11 楼
通常,git在项目的根目录(.git /)中创建一个隐藏目录。在CMS上工作时,可能会安装带有.git /目录以及git元数据的模块/插件。特定的模块/插件
最快的解决方案是查找所有.git目录,并仅保留根git元数据目录。如果这样做,git不会将这些模块视为项目子模块。
#12 楼
在查看了我的.gitmodules
之后,结果发现我确实有一个大写字母,而我不应该有。因此请记住,.gitmodules
目录区分大小写#13 楼
就我而言,该错误可能是由于具有不同子模块配置的两个分支上的.gitmodules之间的合并不正确所致。在从本论坛获取建议后,我解决了手动编辑.gitmodules文件并添加缺少的子模块条目的问题很容易之后,命令
git submodule update --init --recursive
正常工作。
#14 楼
对我们来说,问题在于重复的子模块条目已添加到.gitmodules中(可能是通过合并)。我们在.gitmodules中搜索git抱怨的路径,并找到了两个相同的部分。删除其中一个部分可以为我们解决问题。就其价值而言,git 1.7.1给出了“无子模块映射”错误,但git 2.13.0似乎不在乎。 br />
#15 楼
如果您具有:使用简单的
rm
而不是git rm
删除了子模块; 删除了
.gitmodules
中对该子模块的引用; 删除了
.git/config
中的对该子模块的引用; 您仍然遇到错误,为我解决的问题是读回一个空文件夹,该子文件夹曾经是该文件夹。您可以执行以下操作:
mkdir -p path/to/your/submodule
touch path/to/your/submodule/.keep
.keep
只是一个空文件。 git commit
它,错误应该消失。
评论
听起来您可能已经设法将该路径添加为gitlink-子模块是gitlink以及.gitmoddules和.git / config文件中条目的组合。最近有一个关于这个的问题。试图找到它...@Jefromi:stackoverflow.com/questions/4161022/…?
@Jefromi-我在.git文件夹中的任何位置都找不到该路径。进行grep -r“ Classes / Support / Three20” *。*也不会产生任何结果
@Ben:为什么要在.git文件夹中搜索该文本?这不是git存储内容的方式。如果您真的想验证git的含义,请尝试git ls-tree HEAD类/支持,如果它说Three20是一次提交,则那里有一个gitlink。如果存在,请按照上面链接的VonC问题中的相应说明进行操作,以将其转换为适当的子模块,或将其转换为定期跟踪的内容。
对于将来的访问者,如果您的问题链接到已删除的子模块并且heroku抛出错误,请从github.com/heroku/heroku-repo和heroku repo安装heroku-repo:reset -a appname