Похоже , поведение 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 без каких-либо изменений. Оно будет отображаться в верхней части прокомментированных инструкций.