6

仕事では、12 の Java OSGi バンドルに取り組んでおり、それぞれに独自の git リポジトリがあります。長い目で見れば、すべてのバンドルは互いにかなり独立しているため、個々のリポジトリが正当化されます。

製品リリース (すべてのバンドルで構成される) を作成すると、各バンドルに新しいブランチが作成されますが、これは少し面倒です。そのため、痛みを和らげるために git-submodule を使用することを考えていました ( のようなものgit submodule foreach <cmd>)。

したがって、必要な設定はマスター プロジェクトProductと、各バンドルのサブモジュールです。

Project/
  BundleA/
  BundleB/
  BundleC/

今、私はサブモジュールについて見つけることができるすべてを読むのに数時間を費やしました. で何かを変更する場合はBundleA、でコミットしBundleA、プッシュし、次にサブモジュールの変更をコミットして、Project再度プッシュする必要があることを理解しました.

これは明らかに、そもそも git-submodule が使用されるように設計された方法ではないように思えます。このように使用するのはベストプラクティスに反しますか? それとも、代替案が好まれるケースのように聞こえますか?

  • 最低限の git-submodule の使用法
  • 既存の「git ラッパー」を使用する:
  • OSGi バンドルをバッチ処理する独自の単純な bash スクリプトを作成する

他の提案を歓迎します。

4

2 に答える 2

6

サブプロジェクトがスーパープロジェクトで何をしているかを追跡する必要がない場合 (タイト バインディング)、git-submodules から遠ざけることをお勧めします。

gitslave (http://gitslave.sf.net) は基本的に、サブプロジェクトを一覧表示するスーパープロジェクト内の構成ファイルを使用して、各サブプロジェクトを囲む大きな foreach です。より便利にするさまざまなオプションがありますが、スーパープロジェクト (オプション) とすべてのサブプロジェクトで同じコマンドを実行することが目標である場合、gitslave はほぼ同じくらい便利です。

たとえば、gitslave で新しいブランチを作成するには、次のようにします。

gits チェックアウト -b newbr

次に、スーパープロジェクトとすべてのサブプロジェクトが新しいブランチを作成し、それに変更します。一般に、スーパープロジェクトのすべてのメンバーに対して git コマンドを実行する場合は、「git」コマンドを「gits」に変更するだけです。

于 2011-05-24T13:18:16.533 に答える
2

今、私はサブモジュールについて見つけることができるすべてを読むのに数時間を費やしました。BundleA で何かを変更する場合は、BundleA でコミットし、プッシュしてから、サブモジュールの変更を Project でコミットし、再度プッシュする必要があることを理解しました。

これは明らかに、そもそも git-submodule が使用されるように設計された方法ではないように思えます。このように使用するのはベストプラクティスに反しますか?

残念ながら、それがまさにサブモジュールの使用方法だと思います。おそらく、このバージョンのサブモジュールがメイン プロジェクトのそのバージョンで適切に動作することを強く主張しているため、通常、メイン プロジェクトで新しいバージョンをコミットする頻度は比較的低いと思われます。サブモジュールシステムの現在の設計は、サブモジュールについてメインプロジェクトが知っていることだけがあるため、できることはかなり制限されています。

  • ブロブまたはツリーのハッシュではなく、ツリーに格納されている、サブモジュールがどのコミットにあるべきか
  • .gitmodulesサブモジュールの初期化時に構成に保存および設定された、そのコミットを含む (必要な) リポジトリのデフォルト URL

...そして、サブモジュールで作業しているときは、そこにスーパープロジェクトがあるかどうかに関係なく、スタンドアロンのリポジトリで作業しているようなものです。

あなたが言及したこのプロセスを簡素化する方法のうち、レポは実際にはサブモジュールを使用しないことを明確にする価値があります。これは代替システムです。これは、多くの Stack Overflow ユーザーが推奨しているように見える git-slave の場合と同様です。

個人的には、メイン リポジトリに 24 のサブモジュールがあるプロジェクトに取り組んでおり、新しいバージョンのサブモジュールをコミットして適切にプッシュされたことを確認するプロセスを簡素化する便利なスクリプトだけでうまくいきました。

サブツリーのマージ戦略と混同しないでください。

于 2011-05-24T10:58:11.610 に答える