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

时间:2017-01-18 11:57:55

标签: git git-submodules

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

尝试 rm -rf .git / modules / submodulePath

之后我遇到了问题

致命:不是git存储库

5 个答案:

答案 0 :(得分:24)

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

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

因此,如果移动了repo,这两个文件中的绝对路径无效,并导致'not a git repository'错误。只需手动修复这些文件。

<强>更新

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

答案 1 :(得分:4)

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

{submodule}/.git

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

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

我将其更改为 relative 路径,例如:

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

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

答案 2 :(得分:2)

您只需更新.git文件

即可
  

nano {my submodule} / .git

使用正确的gitdir。

因为我认为你改变了文件夹的路径

答案 3 :(得分:1)

我刚刚遇到了这个问题。

在我的情况下,这是由于具有不同子模块的结帐分支所致。

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

由于某些原因,无法使用以下命令进行初始化:

git submodule update --recursive --init

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

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

答案 4 :(得分:0)

我遇到了这个问题,但是我的主存储库中没有.git/modules目录。我有一个子模块“ build”,因此只需删除所有引用并将其重新初始化:

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