git サブモジュールを使用する場合、カスタマイズを行うための推奨される方法は何ですか? するべきか...
- プロジェクトをフォークし、フォークを追跡する
- デフォルトの動作をオーバーライドしようとする
- ローカルで変更を加える
これらのどれも意味をなさない場合、何が意味するのでしょうか?
git サブモジュールを使用する場合、カスタマイズを行うための推奨される方法は何ですか? するべきか...
これらのどれも意味をなさない場合、何が意味するのでしょうか?
あなたの質問が、あなたが含めたいすべてのプロジェクトがすでにgitプロジェクトであることを意味しているのか、それとも現在svn、mercurial、バージョン管理されていないのか、よくわかりません。後者であれば、ケースバイケースの回答になります。
ほとんどの場合、含めてカスタマイズしたいプロジェクトは既に github などにあるので、github を介してフォークし、それらのフォークをサブモジュールとして使用する必要があります。カスタマイズはすべてチェックインして、github にプッシュする必要があります。
含めたいプロジェクトが別の場所にある場合 (または svn、mercurial などに基づいている場合) は、より複雑になる可能性があります。1 つの方法は、プロジェクトをローカルでフォークしてから、受信した変更を github にプッシュするように cron ジョブを設定することです。つまり、github ミラーを作成します。マージとアップグレードの両方を完全に制御するには、これらのミラーをフォークし、それらのフォークをサブモジュールとしてプロジェクトに含め、ローカルのカスタマイズをチェックインしてミラーのフォークにプッシュする必要がある場合があります。
代替案 #3、プロジェクトをフォークしてローカル チェックインのみを行う方法は、上記のオプションがなく、作成しているものが実際には簡単に配布されることを意図していない場合に使用できます。
モンキー パッチ (リストの代替 #2) は、カスタマイズされたフォークをアップストリームの変更に合わせて最新の状態に保つことにプロジェクトを依存させたくない状況に代わるものです。
git submodule を使用してサブプロジェクトをフォークするのは非常に面倒であることがわかりました。そのため、代わりにgit subtreeを作成しました。
git subtree の考え方は、サブプロジェクトの内容を自分のプロジェクトにインポートすることです。そのため、すべてを一度に分岐して、好きなように新しいコミットを作成します。次に、準備が整ったら (可能であれば)、 を使用git subtree split
してサブプロジェクトの履歴を抽出し、上流に送信できます。