使用不同子模块设置的结帐提交无法正常工作
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
在我们的一个 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