質問: Git初心者です。SouceTreeを使って管理しています。 作っているメインのコードをProgramAというフォルダに入れ、リポジトリとしていますが、ここで、汎用的に使うコードのファイルをmoduleという別のフォルダに入れ別のリポジトリとし、そのmoduleを「サブモジュールを追加」を使用して、ProgramAのリポジトリの下に入れています。 二つのPCを使っているのですが、片方のPCで使い始めにプルをすると、必ず 「コミットされていない変更があります。」と表示されmoduleが作業ツリーのファイルにあり、インデックスの追加でコミットすることになってしまいます。 それをサーバにプッシュするとまた、次に相手方のPCでサーバからプルすると同じようにコミットを求められます。 なので、ProgramAもModuleも**一字一句変えなくてもそうなるので、お互いのPCでプルする度に「Submoduleによる」という自分で訳の分からないコメントを書いた訳のわからないツリーが伸びていきます**。 多分、何かサブモジュールの使い方の理解が間違っていると思うのですが......... SourceTreeの左下のウインドウに表示は Hunk1 : 行0-0 - Subproject comit xxxxxxxxxxxxxxxxxxxxxxxxx + Subproject comit yyyyyyyyyyyyyyyyyyyyyyyyy という表示です。
回答: こんにちは。 Submoduleはgit本体リポジトリのpullやfetchに**追従しません**。 おそらくその「2つのPC」間で、Submoduleで実際にチェックアウトしているコミットハッシュが異なっているのでしょう。 `submodule update`等のコマンドを利用することで、本体リポジトリが保持するSubmoduleの該当ハッシュに向けてチェックアウトすることができるので、それを利用してお互いのサブモジュールのバージョンをすり合わせて下さい。 今は、お互いのPCが「自分の見てるSubmoduleこそが正しい」と主張してpushしあっているような状況です。