如何清理和硬重置特定的 git 子模块?

问题描述 投票:0回答:1

我的项目中有多个 git 子模块,经常需要同时使用

git clean

git reset --hard
全部。 (例如,拥有干净的 CMake 构建树)

为了实现这一点,我从根项目目录运行以下命令:

git submodule foreach --recursive git clean -xfd
git submodule foreach --recursive git reset --hard

但是有时我只想在特定子模块而不是所有子模块上执行此操作。

如何从存储库根目录执行此操作,而不需要

cd
进入特定子模块,然后执行相同操作:

cd path/to/submodule
git clean -xfd
git reset --hard
cd ../../.. # Back to project root directory

我想从项目根目录执行此操作的原因是能够定义

VSCode
任务,通过使用输入变量指定要处理的子模块,使用这些 git 命令仅处理特定子模块。

编辑:

我成功做到了

git clean

git clean -xfd path/to/submodule

但是显然不能对

git reset --hard
做同样的事情,因为没有指定路径的选项:

https://git-scm.com/docs/git-reset

如果有一种方法如何使用

cmake
命令删除子模块中的构建目录,也应该有效。

git git-submodules
1个回答
0
投票

您可以利用

name
变量并使用 if 条件来检查子模块名称是否与特定子模块匹配,例如:

$ git submodule foreach --recursive 'if [ "$name" = "specific_submodule" ]; then ...; fi'
© www.soinside.com 2019 - 2024. All rights reserved.