У меня есть список подмодулей в .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"
@kabanus, поскольку подмодуль иногда не требуется во время сборки. Я не хочу обновлять - инициализировать подмодуль, который не нужен, если для его конфигурации установлено значение false.
Из справки 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
@PrashantShubham Спасибо, хотя на самом деле я предлагал, чтобы он поместил его непосредственно в файл конфигурации (см. Исходный пост, добавив строку напрямую). Но вы можете добавить ответ, как это сделать из оболочки, или предложить отредактировать мой ответ (вы получаете +2 репутации за каждое принятое предложение).
Любая идея, как вы можете заставить это работать для подмодуля подмодуля, используя также параметр --recursive?
@Zatarra У меня работает листинг внутреннего подмодуля в -c submodule."inner".update=none
. Вероятно, изменение файла конфигурации для внутреннего подмодуля сделает то же самое.
Я просто хотел опубликовать наблюдение, которое может не сразу стать очевидным: если вы запустите git config submodule.<name>.update none
перед запуском git submodule update --init --recursive
, вторая команда проигнорирует первую. Единственный раз, когда он работает, это то, что описывает этот ответ, который заключается в объединении обеих команд в одну. HTH
Это может быть вопрос XY. Почему вы хотите исключить подмодуль?