【问题标题】:How to clone multiple specific submodules?如何克隆多个特定的子模块?
【发布时间】:2019-04-01 01:09:34
【问题描述】:

我需要编写一个脚本来克隆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 实现吗?

【问题讨论】:

    标签: bash git git-submodules


    【解决方案1】:

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

    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[@]}" 扩展为上述步骤中生成的数组,每个生成的条目由空格字符分隔。

    【讨论】:

    • 出于好奇...有没有办法在没有 Bash 的情况下在 CMake 中“纯粹”执行此操作?
    • @Eenoku:我发现这几个链接很有用 - foonathan.net/blog/2016/07/07/cmake-dependency-handling.htmlstackoverflow.com/questions/43761594/…。我不是这方面的专家,但您的原始帖子根本没有提到CMake。我从bash 的角度回答了这个问题。如果您有兴趣,请使用CMake 标签提出一个新问题并考虑投票支持此答案
    • 谢谢!我知道,我提到了Bash,你的回答是正确的。我也接受了。
    • 老实说,接受答案通常被认为是正确的反应——我相信,我们不应该真的“强迫”某人支持我们的反应。
    猜你喜欢
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 2012-05-06
    • 2014-10-01
    • 2011-10-19
    相关资源
    最近更新 更多