web-dev-qa-db-ja.com

大きなリポジトリを小さなものに分割して、履歴や問題などを分けたり、大きくしたりするのは良いことですか?

現在、巨大なsvnリポジトリをgitに移植しており、それぞれが独立したバイナリのソースコード、ドキュメント、またはロボットテストを含むリポジトリのサブディレクトリを別々のgitプロジェクトにエクスポートすることを考えています。

それらの1つは、現在開発中のライブラリであり、すべてのバイナリがそれに依存しています。

それらのディレクトリ/バイナリ/ドキュメントなどのすべてが現在開発されています。

それらすべてを別々のgitリポジトリに分離するか、サブモジュールを追加するか、それを1つの巨大なリポジトリであるため、それを保持する必要がありますか?

カタログ構造:

/trunk/src/
    binary1/
    binary2/
    binary3/
    binary4/
    binary5/
    library/
    TA_tests/
    docs/
    scripts/
7
Patryk

私の作業では、モジュールごとに別々のリポジトリとバージョンを維持しています。

長所

  • 各プロジェクトにすべてのモジュールが必要なわけではないため、各プロジェクトのサイズを簡単に抑えることができます
  • コミット履歴はモジュールに固有です
  • 必要に応じて、モジュールの特定のバージョンまたはブランチを簡単に使用できます。

短所

  • 依存関係を維持するには、パッケージマネージャーを使用する必要があります
  • 依存関係には矛盾がある可能性があります。 1つのモジュールはユーティリティと呼ばれるモジュールのv0.1.3を必要とし、別のモジュールはユーティリティのv2.0.2を必要とします

他の考え

現在のプロジェクトが多数のパーツを含む単一のプロジェクトである場合、物事を分離しておくことはそれほど重要ではありません。各モジュールが分離していると、さらに簡単になる場合があります。ただし、さまざまなモジュールを使用する小規模または中規模のプロジェクトが多数ある場合は、個別のリポジトリを持つと非常に便利です。

1
payne8

大きなリポジトリを1つだけ保持するのは私にとってエラーです。なぜなら、コミットタイムラインは、プロジェクトとは何の関係もない多くのコミットによって負担され、理由もなくプッシュ時にブロックされることが多いためです。

3つの選択肢があると思います。

  • git submodules:ライブラリとリポジトリをある程度分離したい場合。それらを少し切り離したい場合は、正当化できます。依存関係に対処するための管理された方法を提供しますが、更新の修正点を提供します。
  • 使用するバージョンを修正するディペンデンシーマネージャーがある( Composer と同じように)。ここでの利点は、使用するバージョンを制御できることと、リポジトリを更新するときに大きな驚きを持たないことです。ただし、変更された場合は必ず更新する必要があります。
  • git subtree:この依存関係に対処する透過的な方法が必要な場合、これは最も結合されたソリューションです。ここでの利点は、依存関係の更新を忘れないようにすることですが、ライブラリがコードを壊すと問題が発生する可能性があります。

それは本当にあなたのワークフローに依存します。ライブラリとリポジトリが緊密に結合されている場合は、gitサブツリーを選択します。依存関係を厳密に制御する場合は、依存サブマネージャーのように選択します。そうでない場合は、gitサブモジュールを選択します。

1
GlinesMome

それはそれを読む必要がある人間のために物事を素晴らしく、きちんと保つので、それは素晴らしい考えだと思います。私は通常、コードでサブディレクトリを使用して、人間が読みやすいようにします。人間が読めるコードを使用しないと頭が痛くなり、物事を探すのが非常に難しくなります。あなたができる最善のことは、メインの実行可能ファイルをホームディレクトリに置き、他のすべてのものを分割することです。幸運を!

0
XiKuuKy