さて、私の質問の短いバージョンは次のようになります。
複数のソリューション間で共有されるプロジェクトがある場合、Gitでプロジェクト参照を処理するための最良の方法は何ですか?また、Gitリポジトリをどのように編成する必要がありますか?
長いバージョンは次のとおりです。
私たちは小さな開発チーム(5人の開発者)であり、現在、ソース管理とビルドサーバーとしてTFSを使用しており、VisualStudioがIDEの選択肢です。私は常に新しいことに挑戦してきました。開発環境を改善しようとしたので、Gitを読んで、TFSのソース管理部分の代わりになるかどうかを確認することにしました。Jiraをワークフローに統合したばかりなので、Git環境としてStashを試してみることにしました。 Jiraとの統合が非常に優れているため、現在gitリポジトリを整理する方法を模索しているところです。そのため、ここにいます。次に、ソリューションの数について説明します。組織された。
たくさんの解決策があります。一部はライブラリであり、一部はVisualStudioのプロジェクト参照を介してこれらのライブラリを参照するプログラムです。
それで、私を混乱させる主なことは、多くのソリューションで参照されているライブラリを処理する方法です。
ライブラリのバージョン管理を開始し、すべてのライブラリを個別のリポジトリに配置する必要がありますか?この方法では、ライブラリが展開する必要のある更新を受信し、そのライブラリが20以上のソリューションで使用されている場合、多くの追加のメンテナンスが必要になるようです。私が間違っている ?私が見ているもう1つの欠点は、Visual Studioにプロジェクト参照がなくなるため、デバッグが非常に面倒になることです。
すべてのソリューションで大きなリポジトリを作成する必要があります。そうすれば、すべての参照が最新になりますか?
また、これらすべてのライブラリを含む独自のnugetリポジトリを作成できるかもしれないと思いました。そうすれば、必要なときに参照ライブラリを更新するのはそれほど面倒ではありません。これは単なるアイデアであり、私はこれを適切に調査していないので、これが何らかの利益になるかどうかはわかりません。
それで、これに関して私にいくつかのアドバイスを与えることができる人はそこにいますか?
これは、残念ながら単一の答えがない質問の1つです-それは状況によって異なります。
最も簡単な解決策は、常に単一のリポジトリを持つことです。これにより、バージョンの異なる複数のリポジトリを管理する際の問題の多くが回避されます。ただし、これは、すべてのバージョンが1つしかない場合にのみ実際に機能します。同じリポジトリ内の2つの製品に対して異なるリリースサイクルを持つことはほとんど不可能です。そのように狂気があります。リポジトリが重要でないサイズに成長しても、実際には拡張できません。
Tillが指摘しているように、1つのオプションは Git Submodules です。これにより、特定のコミットまたはブランチで、あるリポジトリのソースを別のリポジトリに動的にロードできます。もちろん、これには全体が付属しています 問題のホスト 、特定のサブモジュールやその他は、リポジトリをリンクする性質にすぎません。*
Git Subtree が本当に好きな人もいます。これはやや不正行為であり、リポジトリ間でフォルダの履歴を繰り返し抽出してインポートし、また元に戻すことができます。
最後に、ビルド環境に応じて、依存関係管理ツールを利用できます。 VisualStudioについてコメントするのに十分な知識がありません。 Atlassianでは、(現在)Mavenを使用してこれを解決しています。 JSを使用している場合は、NPM/Bowerである可能性があります。Ruby Gemsです。プログラムYにささいな変更を加えるためだけに、ライブラリXの新しいバージョンをリリースする必要があるのはイライラする可能性があります。しかし、ほとんどの場合、それは十分に機能します。
これは本当に進行中の問題であり、私が知っていることは日常的に私を悩ませます。最高のサブモジュールと依存関係管理を組み合わせたより良いソリューションの機会があると思いますが、まだ見つけていません。
私はそれが役立つことを願っていますか?
*ツールの問題は別として、サブモジュールに関する私自身の最大の不満は、他のリポジトリへの絶対URLをチェックインするように人々を促すことです。これは、Gitサーバーまたはリポジトリの1つを移行することを決定するまでは完全に機能し、今ではすべてが壊れています。先日、 相対パス を使用できることがわかりました。これは適切ですが、問題は解決しません。