如何克隆多个特定的子模块?

How to clone multiple specific submodules?

我需要编写一个脚本来克隆 Boost library,但遗憾的是存储库非常大,之后我只需要使用一些子模块。我想像这样将它们存储在一个字符串变量中

MODULES="tools/build libs/system"

然后像这样将变量传递给一个命令

git clone --recurse-submodules=${MODULES} https://github.com/boostorg/boost.git

问题是,将多个参数传递给 --recurse-submodules 后,所有参数都被忽略了。

我看了一下 How to only update specific git submodules?,但答案只涉及克隆一个子模块或重复 --recurse-submodules 多次,我不喜欢这样做,因为我想制作脚本为任意数量的子模块准备。

有什么方法可以用 Git 实现吗?

你的想法是对的,但不要使用变量,使用数组并以这种方式构建你的子模块。

modules=()
for mod in "tools/build" "libs/system"; do
    modules+=( --recurse-submodules="$mod" )
done

for 循环中添加所有模块名称,以便每次迭代在它之前添加所需的字段并生成完整的子模块数组。现在将它 git clone 作为 modules

的引用数组扩展传递
git clone "${modules[@]}" https://github.com/boostorg/boost.git

"${modules[@]}" 扩展为在上述步骤中生成的数组,每个生成的条目由白色 space 字符分隔。