Как исключить конкретный подмодуль git из обновления?

У меня есть список подмодулей в .gitmodules. Я хочу загрузить определенный подмодуль, то есть grpc, только если в файле конфигурации включена какая-то опция как true. Поскольку для моей сборки иногда не требуется grpc. Все подмодули находятся в стороннем каталоге. Итак .gitmodules похож на:

[submodule "third-party/libzip"]
        path = third-party/libzip
        url = https://github.com/nih-at/libzip.git
[submodule "third-party/sqlite"]
    path = third-party/sqlite
    url = https://github.com/mackyle/sqlite.git
    branch = sqlite-3.23.1
[submodule "third-party/grpc"]
    path = third-party/grpc
    url = https://github.com/grpc/grpc.git

Также есть способ исключить подмодуль специально при выполнении команды:

git submodule update --init --recursive

Я хотел бы исключить grpc и подмодули в grpc при обновлении подмодуля. Что-то типа:

git submodule update --init --recursive "exclude third-party/grpc"

Это может быть вопрос XY. Почему вы хотите исключить подмодуль?

kabanus 05.09.2018 09:35

@kabanus, поскольку подмодуль иногда не требуется во время сборки. Я не хочу обновлять - инициализировать подмодуль, который не нужен, если для его конфигурации установлено значение false.

Prasha 05.09.2018 13:42
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
11
2
7 959
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из справки git:

update

Update the registered submodules to match what the superproject expects by cloning missing submodules and updating the working tree of the submodules. The "updating" can be done in several ways depending on command line options and the value of submodule..update configuration variable. Supported update procedures are:

...

...

When no option is given and submodule.<name>.update is set to none, the submodule is not updated.

Так что установите update = none в конфигурационном файле. Вы также можете явно указать пути после -- только для обновления определенных подмодулей. Как отмечает @PrashantShubham, чтобы сделать это на лету и не изменять файл конфигурации, вы можете:

git -c submodule."third-party/grpc".update=none submodule update --init --recursive

Пожалуйста, обновите полную команду: git -c submodule."third-party/grpc".update=none submodule update --init --recursive

Prashant Shubham 06.09.2018 15:58

@PrashantShubham Спасибо, хотя на самом деле я предлагал, чтобы он поместил его непосредственно в файл конфигурации (см. Исходный пост, добавив строку напрямую). Но вы можете добавить ответ, как это сделать из оболочки, или предложить отредактировать мой ответ (вы получаете +2 репутации за каждое принятое предложение).

kabanus 06.09.2018 17:22

Любая идея, как вы можете заставить это работать для подмодуля подмодуля, используя также параметр --recursive?

Zatarra 19.11.2019 14:16

@Zatarra У меня работает листинг внутреннего подмодуля в -c submodule."inner".update=none. Вероятно, изменение файла конфигурации для внутреннего подмодуля сделает то же самое.

kabanus 19.11.2019 19:49

Я просто хотел опубликовать наблюдение, которое может не сразу стать очевидным: если вы запустите git config submodule.<name>.update none перед запуском git submodule update --init --recursive, вторая команда проигнорирует первую. Единственный раз, когда он работает, это то, что описывает этот ответ, который заключается в объединении обеих команд в одну. HTH

smac89 17.12.2020 04:09

Другие вопросы по теме