1. ホーム
  2. git

[解決済み] .gitignoreにあるgitサブモジュールを無視するか、それとも自分のレポにコミットするか?

2022-10-09 16:04:50

質問

私は、プロジェクトにサブモジュールを project_dir/vendor/submodule_one を実行するたびに git status を実行すると modified: vendor/submodule_one (new commits) .

私の質問は、これに対処する最良の方法は何かということです。私は vendor/submodule_one -フォルダーを .gitignore を追加することで、メインプロジェクトがサブモジュールの仕様について知る必要はないのでは?

それとも、サブモジュールを変更してコミットするとき、メインプロジェクトでもコミットする必要があるのでしょうか?

サブモジュールを使い始めたばかりで、それらを設定する以上の情報を見つけることができなかったようです。

どのように解決するのですか?

いいえ、サブモジュールを .gitignore に追加する必要はありません: あなたのサブモジュールから親に見えるのは gitlink (a の特別なエントリです。 mode 160000 ).

つまり、サブモジュールで直接行われた変更は、親ディレクトリでのコミットに続く必要があります。

そうすることで、親ディレクトリはサブモジュールの状態に対して正しいコミットを記録することになります。そのコミットとは、上で述べた "gitlink" です。

この方針については、" git サブモジュールの更新 (サブモジュールの真の姿) "を参照してください。

サブモジュールの主な考え方は コンポーネントベースのアプローチ で、特定のコミットで他のレポを参照するものです。しかし、それらのサブモジュールで何かを変更した場合、親リポジトリのそれらの参照も更新する必要があります。


なお、Git 2.13(2017年第2四半期)では、一方 ではなく でサブモジュールを無視しても、gitlinkを無視することができます。

git config submodule.<name>.active false

詳しくは"でご覧ください。 git サブモジュールの新しいコミットを無視する "です。


注意:Git 2.15.x/2.16 (Q1 2018) では、サブモジュールを無視する方がより正確です。

" git status --ignored --untracked " は、無視されたディレクトリに組み込まれている別のプロジェクトの作業ツリーで停止せず、ディレクトリ自体を無視として表示するだけでなく、その別のプロジェクトのファイルをリストアップしました。

参照 コミット fadb482 (2017年10月25日)による Johannes Schindelin ( dscho ) .

(によって統合されました。 ジュニオ・C・ハマノ--。 gitster -- コミット da7996a , 2017年11月06日)

status : 除外されたディレクトリにあるサブモジュールに惑わされないようにします。

私たちは細心の注意を払って exclude フラグを treat_directory() フラグを追加し、再帰時にその中のファイルが追跡されないのではなく、除外されることを示すことができるようにしました。

しかし、私たちはまだサブモジュールを同じように扱っていませんでした。

そのため git status --ignored --untracked をサブモジュールとし submodule を、gitignored の tracked/ にあるサブモジュールが表示されます。 " です。 Untracked files "セクション、例:。

On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    tracked/submodule/

Ignored files:
  (use "git add -f <file>..." to include in what will be committed)

    tracked/submodule/initial.t

<ブロッククオート

代わりに、サブモジュールを " に表示させたいと思います。 Ignored files " セクションを作成します。

On branch master
Ignored files:
  (use "git add -f <file>..." to include in what will be committed)

    tracked/submodule/