Заставить `git commit -a` игнорировать подмодули?

Заставить `git commit -a` игнорировать подмодули?

Похоже , поведение git commit -aзаключается в том, чтобы включать изменения в подмодули, если в них есть новые коммиты. Обычно я этого не хочу, и иногда я обнаруживаю, что случайно отправляю коммит с изменениями в подмодулях, которые не собирался включать.

Есть ли способ настроить git commit -aигнорирование подмодулей? Я посмотрел git help configи ничего не увидел.

(Менее хорошая) альтернатива могла бы быть, чтобы git statusсделать более понятным на первый взгляд, git commit -aбудет ли включать подмодуль. В настоящее время он показывает либо

modified:   submodule (modified content)

или

modified:   submodule (new commits)

и они раздражающе похожи. Похоже, что submodule.<name>.ignoreопция конфигурации может делать что-то вроде того, что я хочу. Но в идеале я все равно хотел бы видеть изменения в подмодулях, просто не в том же месте, что и все мои другие изменения, если только git commit -aя их не добавлю.

решение1

Вы можете установить submodule.ignore в git config или в файле .gitmodules.

ПРИМЕЧАНИЕ: GIT немного глуп с этим. Если вы установите ignore = all, чтобы получить разумное поведение с git commit -a, он ТАКЖЕ проигнорирует подмодуль в git show/diff, когда вы ЯВНО добавляете их. Единственный способ обойти последнее — использовать опцию командной строки --ignore-submodule=none.

ПРИМЕЧАНИЕ 2: Конфигурация diff.ignoreSubmodules должна иметь возможность устанавливать параметр командной строки по умолчанию --ignore-submodule, но она была сломана в течение многих лет и ничего не делала, поскольку .gitmodules побеждает в конкурсе, поэтому только явные параметры командной строки обеспечат вам нормальное поведение.

решение2

Если у вас не так много подмодулей, я обнаружил, что наиболее удобным будет сначала зафиксировать все, а затем запустить

git reset HEAD^1 путь_подмодуля

Вы всегда можете получить напоминание об этом синтаксисе команды, если выполните git commit --amend без каких-либо изменений. Оно будет отображаться в верхней части прокомментированных инструкций.

Связанный контент