在我们的一个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