サブモジュールで管理しているディレクトリ配下のファイルの更新について
サブモジュールで管理しているディレクトリ配下のファイルの更新は、サブモジュール自体の更新と同様に扱う。
つまり、サブモジュール内で行われた変更を親プロジェクトで反映させるには、サブモジュールに移動してから変更を行い、それをコミットしてプッシュする。
その後、親プロジェクトに戻ってサブモジュールの新しいリビジョンを指すように更新し、それをコミットする。
サブモジュールを使用するときは、それが独立したリポジトリであることを常に念頭に置いて、その更新と親プロジェクトの更新を同期させることが重要
第三者のライブラリをサブモジュールで参照する場合
第三者が管理しているライブラリをサブモジュールとして使用する場合、原則、そのライブラリを直接更新しない。
- コミット権限がない: 第三者が管理するリポジトリに対する書き込み権限がない場合、変更をコミットしてプッシュすることはできない。
- ライブラリの一貫性: 第三者が管理しているライブラリは、その開発者が意図した挙動やAPIを提供するため、これらを自分自身で変更すると、ライブラリの挙動が予測不可能になり、またそのライブラリを更新するたびに変更を適用しなければならない問題が生じるため。
したがって、サブモジュールとして追加された第三者のライブラリを更新する必要がある場合、以下のような手順を踏む。
- 最新の変更を取得する: サブモジュールディレクトリに移動し、
git pull
コマンドを使用して最新の変更を取得する。 - ライブラリの最新の変更を親プロジェクトに反映する: サブモジュールの最新のリビジョンを親プロジェクトが指すように更新します。そして、その更新を親プロジェクトにコミットする。
第三者のライブラリを修正したい場合
もし第三者が管理するライブラリに変更を加える必要がある場合、そのリポジトリに対してPull Requestを提出するのが一般的である。
ただし、その変更が採用されるとは限らず、取り込まれるまでに時間がかかることもあるため、その間は独自の変更を適用したバージョンのライブラリを利用する必要がある。
その場合、そのライブラリのフォークを作成し、それをサブモジュールとして利用することを検討する。