.gitmodule中找不到子模块的path的子模块映射
我有一个在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'
该path只是Xcode中的一个空文件夹,用于存放来自其他目录的项目。 这不是.gitmodules
文件的一部分,所以我不知道它从哪里得到这个path。
有任何想法吗?
2013年11月更新:
在rajibchowdhury的回答 (upvoted)之后,build议的git rm
用于删除索引中指示子模块 (特殊模式为“ 160000
”的“文件夹”)中的特殊条目 。
如果没有在.gitmodule
引用特殊的入口path (如原始问题中的“ Classes/Support/Three20
”),则需要将其删除,以避免在No submodule mapping found in .gitmodules for path
” “ 错误信息。
您可以检查索引中引用子模块的所有条目:
git ls-files --stage | grep 160000
原文答案(2010年11月)
你是否正确地声明了你的初始子模块? (即没有任何尾巴'/'在最后,如我的旧回答中所述 ,即使你的.gitmodule
path看起来不错)。
这个线程提到:
当你从一个新的克隆运行'git submodule init'时你会得到同样的错误吗?
如果是这样,你有什么问题。如果没有子模块,请删除
.gitmodules
以及对.git / config子模块的引用,并确保Pikimal目录中没有.git
目录。
如果解决了这个问题,请检查您的巡航工作副本并执行相同的操作。
显然,不要删除主要的.gitmodules
文件,而是在工作树中查看其他额外的.gitmodules
文件。
仍然在“不正确的子模块初始化”的话题中, Jefromi提到了实际上是gitlinks的子模块。
请参阅“ Git – 如何跟踪未跟踪的内容? ”以了解如何将这样的目录转换为真实的子模块。
在'OtherLibrary / MKStore'时,在.gitmodules中找不到子模块映射
$ git submodule update --init
我不知道为什么发生错误。 花了一分钟后,在stackoverflowfind答案。
$ git rm --cached OtherLibrary/MKStore
然后再次更新子模块。 这工作正常。
http://en.saturngod.net/no-submodule-mapping-found-in-gitmodules
当我使用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
我的scheme是我错误的项目目录包含.git文件夹。
SourceTree将此文件夹视为git子模块,但实际上不是。
我的解决scheme是使用命令行来删除它。
$ git rm -r SampleProject --cached $ git commit -m "clean up folders"
在垃圾中清除垃圾并保持清洁。
我为我解决了这个问题。 最初我试图做到这一点:
git submodule add --branch master [URL] [PATH_TO_SUBMODULE]
事实certificate,如果要克隆主分支,则不应使用–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所需的行不会被添加。
所以我的解决scheme是这样的:
git submodule add [URL] [PATH_TO_SUBMODULE]
我尝试在我的回购的新签出“git子模块初始化”后,只是打这个错误。 原来,我最初指定了错误的情况下模块子文件夹。 由于我在Mac上使用区分大小写的文件系统(hurr),因此失败了。 例如:
git submodule add git@github.com:user/project.git MyApp/Resources/Project Cloning into 'MyApp/Resources/Project'
成功但麻烦在于磁盘上的path是
Myapp/Resources/Project
我不明白的是,为什么git正在将模块启动到错误的文件夹(忽略命令中的错误情况),然后使用后续命令正确运行(通过失败)。
刚刚有这个问题。 有一段时间,我尝试了关于删除path的build议,git删除path,删除.gitmodules,从.git / config删除条目,添加子模块,然后提交并推送更改。 这是令人费解的,因为当我做了“git commit -a”的时候,它看起来没有任何变化,所以我试图推动删除,然后推动读取,使其看起来像一个变化。
过了一会儿,我意外地注意到,在删除所有内容之后,如果我运行“git submodule update –init”,它就会有一个关于git应该不再有任何引用的特定名称的消息:子模块的名称链接到,而不是它检查出来的path名称。 grepping显示这个引用是在.git / index中的。 所以我运行“git rm –cached repo-name”,然后读取模块。 当我这次提交时,提交消息包含一个正在删除这个意外对象的更改。 之后,它工作正常。
不知道发生了什么,我猜测有人滥用了git submodule命令,也许颠倒了参数。 可能是我甚至…希望这可以帮助别人!
scheme:将子目录从目录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
如果返回错误:在pathdirA-xxx的.gitmodules中找不到子模块映射。 这是由于dirA-xxx不存在,但它仍然被git跟踪。 更新git索引:
git rm --cached dirA-xxx
尝试用
git submodule foreach git pull
。 我没有经过git submodule结构的实际研究,所以上面的步骤可能会破坏一些东西。 尽pipe如此,通过上述步骤,目前情况看起来不错。 如果您有任何见解或适当的步骤来完成任务,请在此分享。 🙂
可以在.git/modules
文件夹中find文件夹映射(每个文件夹都具有参考其工作worktree
config
文件),因此请确保这些文件夹与.gitmodules
和.git/config
的configuration相对应。
所以.gitmodules
有正确的path:
[submodule "<path>"] path = <path> url = git@github.com:foo/bar.git
并且在[core]
部分的.git/modules/<path>/config
中,您有正确的path到<path>
,例如
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true worktree = ../../../<path>
如果.git/modules
的正确文件夹丢失,那么你必须去你的子模块目录,然后尝试git reset HEAD --hard
或git checkout master -f
。 如果这样做不起作用,那么可能需要删除所有对已损坏的子模块的引用并重新添加,然后参阅: 重命名git子模块 。
只要git rm subdir
就可以了。 这将删除作为索引的子目录。
在文件.gitmodules中 ,我replace了string
"path = thirdsrc\boost"
同
"path = thirdsrc/boost",
解决了! – –
通常,git会在项目的根目录(.git /)中创build一个隐藏的目录
当你在一个CMS上工作时,它可能会安装带有git元数据的特定模块/插件的.git /目录的modules / plugins
最快的解决scheme是find所有的.git目录,并只保留你的根git元数据目录。 如果这样做,git将不会将这些模块视为项目子模块。
看了我的.gitsubmodules
,发现我确实有一个大写字母,我不应该有。 请记住, .gitsubmodules
目录区分大小写
在我的情况下,错误可能是由于两个分支上具有不同子模块configuration的.gitmodules之间的错误合并。 从这个论坛的build议,我解决了手动编辑.gitmodules文件的问题,添加缺less的子模块条目是非常容易的。 之后,命令git子模块更新 – init –recursive没有问题。
我们面临的问题是重复的子模块条目已被添加到.gitmodules(可能来自合并)。 我们在gitmodules中search了git的path,发现了两个相同的部分。 删除其中一个部分解决了我们的问题。
为什么值得,git 1.7.1给了“没有子模块映射”的错误,但git 2.13.0似乎并不在意。