Как клонировать несколько конкретных подмодулей? - PullRequest
2 голосов
/ 01 апреля 2019

Мне нужно написать скрипт для клонирования Boost library , но, к сожалению, репозиторий действительно большой, и мне нужно потом использовать только некоторые подмодули. Я хотел бы хранить их в одной строковой переменной, например

MODULES="tools/build libs/system"

и затем передайте переменную одной команде, подобной этой

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

Проблема в том, что после передачи нескольких аргументов в --recurse-submodules все они игнорируются.

Я посмотрел на Как обновить только определенные подмодули git? , но ответы охватывают только клонирование одного подмодуля или повторение --recurse-submodules несколько раз, что мне не нравится, так как я хочу сделать скрипт подготовленным для произвольного числа подмодулей.

Есть ли способ, как этого добиться с помощью Git?

1 Ответ

0 голосов
/ 01 апреля 2019

Ваша идея верна, но не используйте переменную, используйте массив и постройте ваши подмодули таким образом.

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[@]}" расширяется до массива, сгенерированного на шаге выше, с каждой сгенерированной записью, разделенной символом пробела.

...