使用不同子模块设置的结帐提交无法正常工作

checkout commit with different submodule setup does not work properly

在我们的一个 git 仓库中,在某个时候添加了一个子模块。现在,每当我检查 git 存储库的状态时,子模块还不存在,它没有正确地 "remove" 子模块。好像是子模块一半在,一半不在的状态。

我也注意到,.gitmodules 中不再预设子模块,但它在 path/to/submodule.git/modules 中的文件夹仍然存在。

我至少尝试了以下操作:

git status => 未跟踪的文件:path/to/submodule

git reset --hard => 不变

git submodule foreach reset --hard => 不变

git clean -d -f => Skipping repository path/to/submodule

git submodule update --init => 不变

但是直到现在我都没有解决。当然我可以手动删除这些文件夹,但我希望它在我切换提交时自动工作,因为这也是我们 CI (Jenkins) 上的一个问题。

非常感谢任何帮助/提示!

您需要 运行 git clean 带有双 -f 参数。来自 documentation(强调我的):

-f --force

If the Git configuration variable clean.requireForce is not set to false, git clean will refuse to delete files or directories unless given -f, -n or -i. Git will refuse to delete directories with .git sub directory or file unless a second -f is given. This affects also git submodules where the storage area of the removed submodule under .git/modules/ is not removed until -f is given twice.

所以正确的命令是:git clean -d -f -f