如何“解决致命问题:不是 git 存储库”?

问题描述 投票:0回答:8

我试图从项目中删除一个子模块

试过rm -rf .git/modules/submodulePath

之后我遇到了问题

致命的:不是 git 存储库

git git-submodules
8个回答
63
投票

这两个文件包含子模块的绝对路径:

{submodule}/.git
.git/modules/{submodule}/config

因此,如果您移动了存储库,这两个文件中的绝对路径无效,并导致“不是 git 存储库”错误。只需手动修复这些文件。

更新:

1.) 从 .gitmodules 文件中删除相关部分。您可以使用以下命令:

git config -f .gitmodules --remove-section "submodule.submodule_name"

2.) 暂存 .gitmodules 变化

git add .gitmodules

3.) 从 .git/config 中删除相关部分。您可以使用以下命令:

git submodule deinit -f "submodule_name"

4.) 删除 gitlink(没有尾部斜杠):

git rm --cached path_to_submodule

5.) 清理 .git/modules:

rm -rf .git/modules/path_to_submodule

6.) 提交:

git commit -m "Removed submodule <name>"

7.) 删除现在未跟踪的子模块文件

rm -rf path_to_submodule

16
投票

我遇到了这个,但我的主存储库中没有

.git/modules
目录。我有一个子模块“构建”,所以只需删除所有引用并重新初始化它:

rm -rf .git/modules
rm -rf build
git submodule init
git submodule update

10
投票

我刚遇到这个问题。

就我而言,这是由于具有不同子模块的结帐分支。

  • 一个分支有一些子模块,但是
  • 另一个还有 2 个子模块。

出于某种原因,它们无法初始化:

git submodule update --recursive --init

在更新正常工作之前,我需要手动删除这个文件/目录。

{submodule-path}/.git
.git/modules/{submodule}/config

9
投票

我将 git 存储库移动到另一个文件夹后遇到了这个错误。当我查看时:

{submodule}/.git

我看到一条带有绝对路径的单行,例如:

gitdir: /Users/ajx/Documents/repo/.git/modules/{submodule}

我改成相对路径,例如:

gitdir: ../../.git/modules/{submodule}

我不确定为什么 git 会硬编码绝对路径...


2
投票

只需更新 .git 文件即可

nano {我的子模块}/.git

使用正确的 gitdir。

因为我认为您更改了文件夹的路径


1
投票

就我而言,当我尝试

git commit -m "***"
时,会出现此问题: 致命的:不是 git 存储库:library-sp18/../.git/modules/library-sp18

我的解决方案: 删除library-sp18中的

.git
文件和
git init


0
投票
  1. 从存储库中删除子模块部分
    .git/config
  2. 删除子模块目录:
rm -rf {submodule-path}
rm -rf .git/modules/*

这些都是保存子模块信息的区域


0
投票

从我的开发分支更改为包含新子模块的功能分支时,我也遇到了这个问题。

在测试了上述所有解决方案之后,我注意到原因是一个 git 配置选项:

submodule.recurse = true

它试图在结帐时获取模块,但子模块没有很好地初始化。

© www.soinside.com 2019 - 2024. All rights reserved.