gitサブモジュール:カスタマイズ
-
20-08-2019 - |
質問
gitサブモジュールを使用する場合、カスタマイズを行うための好ましい方法は何ですか?私は...
- プロジェクトをフォークし、フォークを追跡
- デフォルトの動作をオーバーライドしようとしています
- ローカルで変更を行う
これらのいずれも意味をなさない場合、どうなりますか?
解決
あなたの質問があなたが含めたいプロジェクトがすべてgitプロジェクトであることを暗示しているのか、それとも現在svn、mercurial、バージョン非管理のプロジェクトなのか、私にはよくわかりません。後者の場合、ケースバイケースの回答である必要があります。
ほとんどの場合、インクルードしてカスタマイズしたいプロジェクトはすでにgithubにあるので、githubを介して確実にフォークし、それらのフォークをサブモジュールとして使用する必要があります。カスタマイズをチェックインして、githubにプッシュする必要があります。
組み込みたいプロジェクトが他の場所にある(またはsvn、mercurialなどに基づいている)場合は、注意が必要です。 1つの方法は、プロジェクトをローカルでフォークし、cronジョブをセットアップして、入ってくる変更をgithubにプッシュすることです。つまり、githubミラーを作成します。マージとアップグレードの両方を完全に制御するには、それらのミラーをフォークし、それらのフォークをプロジェクトのサブモジュールとして含め、ローカルのカスタマイズをチェックインし、ミラーのフォークにプッシュする必要があります。
代替案#3、プロジェクトをフォークし、ローカルチェックインのみを行うは、上記のオプションがなく、作成するものが実際に簡単に配布されることを意図していない状況で使用できます。
Monkeyパッチ(リストの代替#2)は、上流の変更に合わせてカスタマイズされたフォークを最新の状態に保つことで、プロジェクトが依存することを望まない状況の代替手段です。
他のヒント
gitサブモジュールを使用してサブプロジェクトをフォークするのは非常に面倒だと思うので、 gitサブツリー<代わりにa>。
gitサブツリーのアイデアは、サブプロジェクトのコンテンツを自分のプロジェクトにインポートすることです。したがって、すべてを一度にブランチし、好きなように新しいコミットを作成します。次に、準備ができたら、サブプロジェクトの履歴を抽出して上流に送信するためにgit subtree split
を使用できます。