2017-11-03 9 views
0

私は、共通のベースプラグインから継承した複数のプラグインがあるプロジェクトに取り組んでいます。実際にgitを使用する方法を見つけようとしています。 [OK]をgitでコードバンドルを維持するための実用的な方法

Example Repo: 
    OfficePlugin [directory containing several .cs files and a .csproj] 
    CopyPlugin [directory with .cs files and .csproj. Class inherits from OfficePlugins] 
    CutPlugin [directory with .cs files and .csproj. Class inherits from OfficePlugins] 
    PastePlugin [directory with .cs files and .csproj. Class inherits from OfficePlugins] 
    FontPlugin [directory with .cs files and .csproj. Class inherits from OfficePlugins] 
    DecorationsPlugin [directory with .cs files and .csproj. Class inherits from OfficePlugins] 

は、この例のように、我々は、この場合にはOfficePluginと呼ばれるベースのプロジェクトを持っています。 (C#プロジェクトを束ねいくつかのファイルが含まれているが、これは任意の言語のための質問である可能性があります。)

のは、私たちがプロジェクトに取り組んで3人のプログラマを持っているふりをしてみましょう。 (私が知っているから)1つのレポ内のすべてのこれらのファイルの通常のgitの設定の下で

Mark (Our I/O guy): 
    CopyPlugin 
    CutPlugin 
    PastePlugin 
Nancy (Out Font manager): 
    FontPlugin 
    FontDecorationsPlugin 
Joe (The cross department integrator): 
    FontDecorationsPlugin 
    PastePlugin 

、私たちのプログラマは、彼らがコントロールしていないディレクトリを無視する必要があります。それは問題ありません。

しかし、のはジョーを使用すると、1つのドキュメントから別のテキストを貼り付けるとき、フォントスタイルが保存されたペーストの特殊なタイプを行う能力を追加したとしましょう。いくつかのコミットが続きます。

Commit Log 
    Commit: 12345 Author: Mark CopyPlugin Enhancements 
    Commit: 23456 Author: Nancy FontPlugin Speed Profiling 
    Commit: 34567 Author: Joe PastePlugin Font Decoration Ability 
    Commit: ABCDE Author: Mark Update of all I/O Plugins 

この時点で、マークとジョーは、ジョーの変化が大きな変化であったことを認識しています。 PastePluginのディレクトリはABCDEをコミットするためにロールバックする必要がありますが、FontPluginとCopyPluginの変更は失われたくありません。

私は150のプラグインに近いことを除いて同様の状況があります。 150 repos(プラグインごとに1つ)は狂っているようだし、それぞれにOfficePluginのコピーが必要です。それは良いオプションかもしれませんが、追加または追加のリポジトリを削除するときに竹でないことを確認自動建物がうまくいくように

サブモジュールまたはSubRepoが見えます。

クレイジーブランチスキームとマージを行うことができますが、それは本当に苦しいと思います。別のオプションは、そのディレクトリ内のすべてのファイルを正確にコミットしてチェックアウトすることです。そのオプションは面倒です。特に、2つのコミットを行ってログを調べて、3か月前にどこにあったのか確認する必要がある場合は、そうです。

何らかの方法でタグ付けすることもできますか?しかし、私はそれが特定のディレクトリをチェックアウトするのと同じくらい難しいと思う。

この状況を処理する実際の方法はありますか?

+0

IMO git submodulesは避けるべきです。それは私には分かりません。メインプロジェクトのサブモジュールを 'git pull'しても常に更新されるわけではありません。それぞれのプラグインを個別にパッケージ化し、特定のバージョンに依存する依存管理システムはありませんか? NuGetか何か? – AmazingDreams

答えて

1

良いパス構造を持つ単一のレポを使用するだけです。

はあなたの例ではこの1つのだけのプラグインをロールバックすることは非常に簡単です:それです

cd PastePlugin 
git checkout ABCDE -- . 
git commit 

Googleのgitリポジトリ(重点はy)はインスピレーションとして構成されていますが、そのアプローチは多くの長年の作業の結果ですが、しかし、学ぶべき教訓は、単一のリポジトリに多くのプロジェクトを持つことが非常に可能であり、ツーリング(スクリプト、フックなど)で多くを達成できることです。

関連する問題