Git子模块没有.gitMODULES文件? [英] git submodules without .gitmodules file?

查看:8
本文介绍了Git子模块没有.gitMODULES文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

切换分支(使用SourceTree),我收到错误消息,如

fatal: No url found for submodule path '...' in .gitmodules

整个项目中没有.gitmodules文件。

我应该看哪里?

SourceTree在分支切换时执行以下命令:

git --no-optional-locks -c core.quotepath=false submodule update --init 

当我输入git submodules时,输出为:

# git submodule                        
fatal: no submodule mapping found in .gitmodules for path '...'

文件夹...为空。

推荐答案

这里有一个损坏的子模块。(或半个子模块?没有指令的子模块?目前还不清楚如何称呼--除了VonC notes,我们可以说gitlink的一半是一个"gitlink",这至少是一个可搜索的术语。)

Git中的子模块是对另一个Git存储库的引用。为了使用子模块,您必须已经有另一个Git存储库。一般来说,要使成为Git存储库,我们主要使用git clone来复制其他一些现有的存储库。因此,通常情况下,子模块会附带Git运行git clone所需的指令。这些说明放入.gitmodules文件中。

如果.gitmodules文件缺失,如本例所示,这意味着缺少设置子模块的指令。是通过添加指令来修复它,还是从下一次提交中删除格式错误的子模块来修复它,这由您自己决定。

删除半形子模块更容易。请参阅VonC's accepted answerNo submodule mapping found in .gitmodule for a path that's not a submodule,但您所要做的就是使用git rm,然后提交。这个新的提交将不再引用由于缺少克隆指令而无法克隆的子模块。基于此提交构建的后续新提交不会提及该子模块,也不会提及该子模块(它仍然不存在)。

请注意,所有现有的提交都会被破坏。对此您唯一能做的就是删除(或替换)任何现有的中断提交,因为任何现有的提交都不能被修改。尝试修复或删除现有提交通常不是一个好主意,因为其他人可能正在依赖它们。如果您已将另一个Git存储库克隆到位,则可以将这样的半子模块/破碎子模块用作常规(未破损)子模块。

要通过修改子模块来解决问题,请将适当的配置放入新的.gitmodules文件和git addgit commit文件中。当然,实际执行操作的问题是,您需要知道指令是什么。因为.gitmodules文件中的信息分为几个部分:一个部分是路径,它只是模式160000git ls-files条目的名称(同样,请参见Vonc的答案)。但另一部分是应该克隆的存储库的URL,谁知道这可能是什么?1


1理论上,拥有您克隆的任何存储库以进入这种情况的人都应该知道-或者,他们应该知道谁知道,或者认识认识某人的人谁知道等等。但在实践中,您会得到很多It was like that when I got here.

这篇关于Git子模块没有.gitMODULES文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆