我的项目中有多个 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
命令删除子模块中的构建目录,也应该有效。
您可以利用
name
变量并使用 if 条件来检查子模块名称是否与特定子模块匹配,例如:
$ git submodule foreach --recursive 'if [ "$name" = "specific_submodule" ]; then ...; fi'