クリストファーは、リポジトリごとに1つのプロジェクトの欠点を列挙する非常に良い仕事をしました。複数リポジトリのアプローチを検討する理由のいくつかを説明したいと思います。私が働いてきた多くの環境では、複数リポジトリのアプローチが妥当な解決策でしたが、リポジトリの数とカットを行う場所の決定は必ずしも簡単なものではありませんでした。
私の現在の立場では、10年以上の歴史を持つ巨大な単一リポジトリCVSリポジトリをいくつかのgitリポジトリに移行しました。その最初の決定以来、リポジトリの数は(他のチームのアクションを通じて)成長し、最適以上のものがあると私は思うほどになりました。いくつかの新入社員はリポジトリをマージすることを提案しましたが、私はそれに反対しました。Waylandプロジェクトにも同様の経験があります。私が最近見た講演では、ある時点で、200を超えるgitリポジトリがあり、リードが謝罪しました。彼らのウェブサイトを見ると、今では彼らが5であることがわかります。リポジトリへの参加と分割は管理可能なタスクであり、(理由の範囲内で)実験することは問題ありません。
それでは、いつ複数のリポジトリが必要になるのでしょうか?
- 単一のリポジトリは大きすぎて効率的ではありません。
- リポジトリは疎結合または分離されています。
- 通常、開発者が必要とするのは、開発するリポジトリの1つまたは小さなサブセットのみです。
- 通常、リポジトリを個別に開発し、たまに同期するだけで済みます。
- あなたはより多くのモジュール性を奨励したいです。
- 異なるチームは異なるリポジトリで作業します。
ポイント2と3は、ポイント1が成立する場合にのみ重要です。リポジトリを分割することで、オフサイトの同僚が被る遅延を大幅に減らし、ディスク消費を減らし、ネットワークトラフィックを改善しました。
4と5はより微妙です。たとえば、クライアントとサーバーのリポジトリを分割すると、クライアントとサーバーのコード間の変更を調整するためのコストが高くなります。これは、2つの間の分離されたインターフェイスを促進するという点で、プラスになる可能性があります。
マルチリポジトリプロジェクトの欠点があっても、多くの立派な作業がそのように行われます-ウェイランドとブーストが思い浮かびます。ベストプラクティスに関するコンセンサスがまだ発展していないと思います。判断が必要です。複数のリポジトリ(git-subtree、git-submoduleなど)を操作するためのツールはまだ開発および実験中です。私のアドバイスは、実験して実用的であることです。