git submodule add fatal:不是Git Repository

时间:2012-04-06 20:18:23

标签: git git-submodules

我对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 

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

非常感谢任何见解。

3 个答案:

答案 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