使用不同子模块设置的签出提交不能正常工作



在我们的一个git repo中,有一个子模块是在某个时候添加的。现在,每当我签出git仓库的状态时,如果子模块还没有存在,它就不会正确地"删除"子模块。它似乎处于一种状态,即子模块一半在,一半不在。

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

我至少尝试了以下事情:

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

git reset --hard => unchanged

git submodule foreach reset --hard => unchanged

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

git submodule update --init => unchanged

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

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

您需要使用两个-f参数运行git clean。来自文档(强调我的):

- f——力

如果Git配置变量clean。requireForce未设置为False, git clean将拒绝删除文件或目录,除非已知-f -n或-i。Git将拒绝删除带有.git的目录子目录或文件,除非给出第二个-f。这也影响Git子模块所在的存储区域被移除的子模块下.git/modules/不会被移除,直到-f被输入两次。

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

这是非常有用的代码。我正在处理这个git未跟踪的问题,这是正确的命令git clean -d -f -f

最新更新