获取`git commit -a` 以忽略子模块吗?

phi*_*ilh 10 git

的行为git commit -a似乎是包含对子模块的更改,如果它们内部有新的提交。这不是我通常想要的,有时我会发现自己不小心推送了一个我不打算包含的子模块更改的提交。

有没有办法设置git commit -a忽略子模块?我git help config进去看了看,什么也没看到。

一个(不太好的)替代方案可能是git status让一目了然地更清楚是否git commit -a包含子模块。目前它显示

modified:   submodule (modified content)
Run Code Online (Sandbox Code Playgroud)

或者

modified:   submodule (new commits)
Run Code Online (Sandbox Code Playgroud)

那些令人讨厌的相似。看起来submodule.<name>.ignore配置选项可以做我想做的事情。但理想情况下,我仍然希望看到子模块的更改,除非git commit -a将它们添加到我所有其他更改的位置。

小智 3

您可以在 git config 或 .gitmodules 文件中设置 submodule.ignore 。

注意:GIT 在这方面有点愚蠢。如果您设置ignore = all,以通过 git commit -a 获得正常的行为,那么当您明确添加子模块时,它也会忽略 git show/diff 中的子模块。解决后者的唯一方法是使用命令行选项 --ignore-submodule=none。

注意2: diff.ignoreSubmodules 配置应该能够设置默认的命令行选项 --ignore-submodule,但多年来已经被破坏,并且在 .gitmodules 赢得比赛时什么也不做,所以只有显式的命令行选项才会得到你的行为是理智的。