зафиксировать изменения в подмодулях с помощью единственной команды - PullRequest
1 голос
/ 16 февраля 2020

Я пытаюсь зафиксировать изменения, внесенные в несколько подмодулей:

$ git submodule foreach git commit -m 'fixed header guards'
Entering 'libs/BaseDisplay'
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
fatal: run_command returned non-zero status for libs/BaseDisplay
.

Я вижу, что процесс останавливается на первом подмодуле, который является устаревшим ... Однако есть много других подмодулей, которые поставили файлы. Как зафиксировать изменения, сделанные в таком подмодуле, единственной командой?

1 Ответ

1 голос
/ 16 февраля 2020

Короткая версия, измените вашу команду на:

git submodule foreach "git commit -m 'fixed header guards' || :"

Более длинная версия: Как указано на странице man:

Ненулевой возврат команды в любом подмодуле вызывает обработка завершается.

И рекомендует:

Это можно изменить, добавив || : до конца команды.

Что это делает:

Список ИЛИ имеет вид

command1 || command2

command2 is выполняется тогда и только тогда, когда command1 возвращает ненулевой статус выхода. Состояние возврата списков AND и OR - это состояние завершения последней команды, выполненной в списке.

И : равно bash s nop: ничего не делать, (и всегда ) верните успех.

Двойные кавычки вокруг command части submodule foreach гарантируют, что все это передается git как один аргумент, и оболочка, из которой вы вызываете его, не анализирует || : бит сам по себе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...