2

次のディレクトリ構造を持つマスターブランチがあります

templates/something.lib
templates/libs/1.lib

また、次のファイルを含む templates_master ブランチもあります (ルートの右側)。

a.html
b.html

次に、マスターに移動し、テンプレートをマスター テンプレート フォルダーにロードします。

git read-tree --prefix=templates/ -u templates_master

これが現在このマスター構造になっています

templates/something.lib
templates/libs/1.lib
templates/a.html
templates/b.html

次に、マスターにとどまり、templates/a.html にいくつかの変更を加えて、いくつかのコミットを行います。ここで、この変更された templates/a.html を元のブランチに戻したいと思います。templates_master ブランチに切り替えて、このコマンドを実行します

git merge -s subtree master

ただし、このコマンドはmaster:templates/a.htmlをtemplates_master:a.htmlにコピーするだけでなく、これらのlibsファイルもコピーするため、基本的に私のtemplates_masterブランチには元のマスターtemplates/が持っていたすべてのものがあります。特定のファイルとフォルダーを master ブランチのみに保持するように git に指示することは可能ですか、またはこのロジックは git レベルでハードコードされていますか。つまり、サブディレクトリのマージ中に、templates/ を指すツリーのようなものを使用し、templates/ 内のすべてが子になることができます。テンプレートの/ ?

4

1 に答える 1

0

残念ながら、これがサブツリーのワークフローの要件であると確信しています。それらは結局「サブツリー」と呼ばれます。サブツリーのどのパスにもスーパー プロジェクト ファイルを含めることはできません。

とは言っても、これはたくさん出てきます!誰かが解決策を考えてくれるだろうか。

2 つのプロジェクトを同じフォルダーにマージできると想像してみてください。README などの一般的なファイルをどのように処理しますか? 新しいファイルを追加するとどうなるでしょうか。追加しているプロジェクトをどのようにgitに知ることができますか? このようなニーズに対応するには、クライアントスペックのマッピングと同様の新しい概念がほぼ必要になるでしょう。

今のところ、サブプロジェクトをサブフォルダーに保持してみてください。

于 2014-03-06T07:59:05.310 に答える