サブモジュールを無視するには `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 はこの点に関してはちょっと愚かです。git commit -a で正常な動作を得るために ignore = all を設定すると、git show/diff でサブモジュールを明示的に追加しても無視されます。後者を回避する唯一の方法は、コマンドライン オプション --ignore-submodule=none を使用することです。

注 2: diff.ignoreSubmodules 構成は、デフォルトのコマンドライン オプション --ignore-submodule を設定できるはずですが、何年も壊れており、.gitmodules が優先されるため何も実行されません。そのため、明示的なコマンドライン オプションのみを使用して正常な動作を得ることができます。

答え2

サブモジュールがあまりない場合は、まずすべてをコミットしてから実行するのが一番便利だと思います。

git リセット HEAD^1 サブモジュールパス

git commit --amend を何も変更せずに実行すると、このコマンド構文をいつでも思い出すことができます。コメント付きの手順の上部近くに表示されます。

関連情報