我对Git很新,并尽力找到有关此问题的文档但无济于事。
这是我的命令:
$ git submodule add https://github.com/joliver/EventStore.git externalsource/JOliverEventStore/
致命:不是git存储库:../.git/modules/externalsource/JOliverEventStore 无法签出子模块'externalsource / JOliverEventStore'
我在我的仓库的根目录中,目前没有/externalsource/JO
liverEventStore/
的目录。错误是谈论我不知道的目录。
如果我将子模块添加到根目录,如下所示:
$ git submodule add https://github.com/joliver/EventStore.git JOliverEventStore
我没有问题,它在根目录中创建了文件夹。
非常感谢任何见解。
答案 0 :(得分:11)
这可能取决于您使用的Git版本:recent thread (February 2012)提到了一个错误:
最近,一个名为
<name>
的子模块的git目录位于超级项目的.git/modules/<name>
目录中,而工作树中包含一个gitfile
指向。当在目前不存在的分支上添加相同的子模块时(在.gitmodules文件中找不到该子模块),该名称不会从路径中初始化。
这会导致在找到gitfile
目录时在.git/modules/<name>
中输入错误的路径,因为这样可以使用 - 现在为空的名称。 然后它始终只指向一个目录,即使我们在目录层次结构中有更深的路径。
但更一般地说,使用git submodule
的<path>
参数:
<path>
是克隆子模块在超级项目中存在的相对位置。
- 如果
<path>
不存在,则通过从指定的URL克隆来创建子模块。- 如果
<path>
确实存在并且已经是一个有效的git存储库,则会将其添加到变更集而不进行克隆。
提供第二种形式是为了便于从头开始创建新的子模块,并假设用户稍后将子模块推送到给定的URL。
eoinoc提到in the comments另一个原因,详情请问“git status
returns fatal: Not a git repository but .git exists and HEAD has proper permissions
”。
我的repo的位置发生了变化,我需要更新git的配置文件。
答案 1 :(得分:1)
这似乎很愚蠢,但是由于我刚刚在这个愚蠢的错误上浪费了30分钟....
您的父存储库必须已经被创建为git存储库。我刚刚创建了父级,然后创建了子模块,并尝试git submodule add
进入父级。但是,父级尚未初始化为git repo。
这导致了与您提到的错误相同的错误(“不是git存储库”)。但是它是父级,而不是一个git存储库。。。傻了。
答案 2 :(得分:0)
我为了一个简单的问题浪费了几分钟
第一个git init
然后安装主题git submodule add https://github.com/joliver/EventStore.git JOliverEventStore