我试图从项目中移除一个子模块
尝试使用 rm -rf .git/modules/submodulePath 命令
之后我遇到了以下问题:
致命错误:不是一个 git 仓库
我试图从项目中移除一个子模块
尝试使用 rm -rf .git/modules/submodulePath 命令
之后我遇到了以下问题:
致命错误:不是一个 git 仓库
这两个文件包含绝对的子模块路径:
{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
git reset
。 - ton2.27.0
。 - David Gaysubmodule deinit
,谢谢提供信息! - Jay我遇到了这个问题,在我的主仓库中没有.git/modules
目录。我有一个子模块"build",所以只需删除任何引用并重新初始化它:
rm -rf .git/modules
rm -rf build
git submodule init
git submodule update
rd /s /q <dir>
(在命令提示符中)或者rd -r <dir>
(在PowerShell中)。详细信息请参考https://stackoverflow.com/a/97896/11502722。 - undefinedRemove-Item <dir> -Recurse -Force
可能更好。您可以在https://stackoverflow.com/questions/25798272/cannot-delete-a-file-even-when-logged-in-as-an-administrator上找到更多信息。 - undefined我刚遇到了这个问题。
在我的情况下,这是由于检出具有不同子模块的分支造成的。
由于某种原因,它们无法使用以下命令初始化:
git submodule update --recursive --init
我需要手动删除这些文件/目录,然后更新才能正常工作。
{submodule-path}/.git
.git/modules/{submodule}/config
rm -rf 子模块路径
命令即可。谢谢~ - guozqzzu我把一个git仓库移动到了另一个文件夹后,遇到了这个错误。当我查看时:
{submodule}/.git
我看到了一行只有一个绝对路径,例如:
gitdir: /Users/ajx/Documents/repo/.git/modules/{submodule}
我将其更改为相对路径,例如:
gitdir: ../../.git/modules/{submodule}
我不确定为什么git会硬编码绝对路径...
您可以简单地更新.git文件
nano {我的子模块}/.git
使用正确的gitdir。
因为我认为您更改了文件夹的路径。
git commit -m "***"
时,出现了如下问题:
fatal: not a git repository: library-sp18/../.git/modules/library-sp18.git
文件并执行git init
。.git/config
中删除子模块部分rm -rf {submodule-path}
rm -rf .git/modules/*
这些都是子模块信息保存的区域
当我从开发分支切换到包含新子模块的特性分支时,我也遇到了这个问题。
在尝试了上述所有解决方案后,我注意到问题的原因是一个 git 配置选项:submodule.recurse = true
它试图在检出时获取模块,但子模块没有被正确初始化。