git リポジトリに Project1 があるとします。Project1 内に、Project1+ (Project2、Project3 など) に含めたいサブフォルダーがあります。「含める」とは、コピー アンド ペーストを意味するものではありません。Project1 に変更を加えた場合に Projects1+ にそれらの変更を自動的に統合できるように、Project1 への参照が必要です。さらに、 Project1+ 内の複数の場所に配置したいと考えています。
例:
Project1
|-Subfolder1
|-Stuff I want...
|-README.md
Project2
|-Subfolder1 <- from Project1
|-SomeOtherFolder
|-Subfolder1 <- from Project1
|-README.md
次の理由により、Git サブモジュールは機能しません。
- サブモジュールは、サブフォルダーではなく、リポジトリ全体です。リポジトリ全体ではなく、1 つのフォルダーだけが必要です。
次の理由により、サブツリー マージ戦略は機能しません。
- サポートされるサブツリーは 1 つだけです。サブツリーのプル (git pull -s subtree...) を実行すると、最上位レベルのもののみが更新されます (作成された順序に関係なく)。
私はgitを初めて使用するので、上記の結論が間違っている可能性があることに注意してください。しかし、これは私が調査と実験の両方を通じて発見したことです。
私が思いついた可能な解決策は次のとおりです。
- Project1 のブランチを作成します。
- このブランチから不要なものをすべて削除します。
- 必要なファイルをこのブランチのルートに移動します。
- サブフォルダーを削除します。
- このブランチをサブモジュールとして Project1+ に追加します。
これはちょっとうまくいきました。Project1 マスター ブランチを変更し、変更を新しいブランチにマージして、サブモジュールを更新することができましたが、これは不必要に複雑に思えます (SVN での処理がいかに簡単かを考えると)。さらに、Project1 の変更をマージすると、削除されたファイルが競合していると見なされたようです。つまり、Project1 を更新するのは大きな PITA でした。たぶん、別のマージ戦略が必要ですか?
しかし、主に私が尋ねているのは、これが正しい道でさえあるのでしょうか?
記録として、これは SVN Externals を使えば簡単です。したがって、ユースケースはそこにあります。そして、誰もgitでこれを行っていない可能性が完全にあることに気づきました。数日間の調査の後にオンラインで見つけることができる説明はすべて、「プロジェクトを再構築して、共有したいものを各レポに含める」ことです。つまり、Project1 の「サブフォルダー」は独自のリポジトリになります。それが最終的な答えではないことを願っています。
ありがとう!