10

我对 Git 还很陌生,尽我所能找到一些关于这个问题的文档,但无济于事。

这是我的命令:

$ git submodule add https://github.com/joliver/EventStore.git externalsource/JOliverEventStore/ 

致命:不是 git 存储库:../.git/modules/externalsource/JOliverEventStore 无法签出子模块“externalsource/JOliverEventStore”

我在我的 repo 的根目录中,目前没有/externalsource/JO liverEventStore/. 错误是在谈论我不知道的目录。

如果我像这样将子模块添加到根目录:

$ git submodule add https://github.com/joliver/EventStore.git JOliverEventStore 

我没有问题,它会在根目录中创建文件夹。

任何见解将不胜感激。

4

3 回答 3

12

它可能取决于您使用的 Git 版本:这个最近的线程(2012 年 2 月)提到了一个错误:

从最近开始,一个名为的子模块<name>的 git 目录位于超级项目的.git/modules/<name>目录中,而工作树包含一个gitfile指向那里。

当相同的子模块被添加到到目前为止它不存在的分支上时(在 .gitmodules 文件中找不到它),名称不会从路径中初始化,因为它应该。
这会导致在找到目录gitfile时输入错误的路径.git/modules/<name>,因为这很高兴使用 - 现在为空 - 名称。
然后它总是只指向一个目录,即使我们在目录层次结构中有更深的路径。

但更一般地说,使用 的<path>论点git submodule

<path>是克隆子模块存在于超级项目中的相对位置。

  • 如果<path>不存在,则通过从命名 URL 克隆来创建子模块。
  • 如果<path>确实存在并且已经是有效的 git 存储库,则将其添加到变更集中而不进行克隆。
    提供第二种形式是为了便于从头开始创建新的子模块,并假定用户稍后会将子模块推送到给定的 URL。

eoinoc在评论中提到了另一个原因,在问题“ git statusreturnsfatal: Not a git repository but .git exists and HEAD has proper permissions ”中有详细说明。

我的 repo 的位置已经改变,我需要更新 git 的配置文件。

于 2012-04-07T09:36:42.247 回答
6

这看起来很愚蠢,但因为我刚刚在那个愚蠢的错误上浪费了 30 分钟......

您的父存储库必须已经创建为 git 存储库。我刚刚创建了父模块,然后我创建了子模块并尝试git submodule add进入父模块。但是,父级尚未初始化为 git 存储库。

这导致了与您提到的错误相同的错误(“不是 git 存储库”)。然而,它是不是 git 存储库的父级......愚蠢。

于 2020-07-23T14:57:43.343 回答
3

我浪费了几分钟只是为了一个简单的问题

第一的git init

然后安装主题git submodule add https://github.com/joliver/EventStore.git JOliverEventStore

于 2021-06-25T16:10:42.473 回答