1

現在、Source Safe を使用しており、Subversion への移行を開始しています。すべての外部 SDK (> 500 MB) は現在 Source Safe に保持されており、それらを VSS から何らかのリポジトリに移動する方法を探しています。

C++ (ほとんど)、C# (多数)、Java (少数) のプロジェクトがあります。何百ものプロジェクト。Windows プラットフォームのみ。

私はいくつかの依存関係マネージャーをいくつか持っていますが、満足していません:

  • NuGet - .Net には適していますが、C++ には問題があります
  • Ivy - 詳細はわかりませんが、C++ では受け入れられないようです

最初の質問: 他に何を確認できますか? エンド開発者が簡単に使用できるようにする必要があります。最良のケース - IDE 内での単純なビルド。


現在、私は次の解決策に傾倒しています:

S: などのほとんど使用されないドライブを割り当て、'DEV HOME' として宣言します。

次に、外部をここに配置します。

S:\SDK\boost\1.30\...
S:\SDK\boost\1.45\...
S:\SDK\oracle\agile_9.0.0.0\...
S:\SDK\IBM\lotus_8.0\...
S:\SDK\IBM\lotus_9.0\...
S:\Tools\NuGet\nuget.exe
S:\Tools\clr\gacutil.exe

Autobuild マシンは、この「DEV HOME」のマスターコピーを保持します。すべての開発者は、必要な SDK を autobuild マシンからローカルにコピーし、substでディスクを作成する必要があります。

このソリューションには大きな問題が見つかりません:

  • 枝。異なるブランチのプロジェクトには、異なるバージョンの SDK への参照を含めることができます (boost など)。
  • 外部コンポーネントのバージョンはあまり頻繁に変更されないため、ここでは何百ものブースト バージョンはありません。
  • 開発者が簡単にセットアップできます。
  • あらゆるツールでサポートされる絶対パス。
  • ソースにそれほど大きくない SSD ドライブを使用する場合、ディスク容量に問題はありません。(現在、シンボリック リンクを使用して、外部ファイルを別のドライブに移動しています。しかし、他の開発者にとっては、これはブラック マジックのように見えます)

マイナーな問題:

  • 個人的には、それは美しい解決策ではありません。
  • ディスク (S:) はビジー状態になる可能性があります
  • Linux ではそのままでは使えません (ただし、現時点では関心がありません)。

2 番目の質問: このソリューションのどの問題が考えられますか?


更新 1 : 相対パスではない理由。

  1. 外部はソースルートと同じディレクトリにある必要がありますか? :

:

externals/...
branch-root-1.0/project_collection_1/project1/...
branch-root-2.0/project_collection_2/...

ここでは、すべてのプロジェクトを 1 つの場所に配置するか、外部を複製する必要があります。絶対パスを使用したソリューションと大差ないようです。

  1. 外部はソースルートと同じフォルダーにある必要がありますか? :

:

branch-root-1.0/externals/...
branch-root-1.0/project_collection_1/project1/...
branch-root-1.0/project_collection_2/...
branch-root-2.0/externals/...

次に、チェックアウトされた各ブランチで外部が複製されます。ブランチのチェックアウトごとにこの +500MB + それらをセットアップするためのいくつかの追加作業。

まあ、これは受け入れられるように見えますが、絶対パスよりも優れているとは思いません。本当は絶対パスも苦手なので、相対パスのメリットを知りたいです。

4

2 に答える 2

1

プラットフォームが Windows のみで Visual Studio の場合は、NuGet が最適です。Nuget について私が気に入っているのは、構成がほとんどないことです。たとえば、Boost Nuget パッケージをプロジェクトにインストールした直後に Boost ライブラリを使用できます。

  • インクルード/ライブラリ パスを構成する必要はありません (現在の問題)。
  • packages.config ファイルをコピー (SVN/mercurial に保存) するとすぐに、プロジェクトのパッケージを他のコンピューターに自動的にインストール/構成/更新します。
  • パッケージ間の互換性の問題を解決/警告できます。

この問題に対する適切なクロスプラットフォーム ソリューションについては知りません。

于 2013-11-15T00:44:16.447 に答える
1

私はあなたが持っている道をたどりました....それはうまくいくことができます。ただし、すべてを相対パスにして、プロジェクトを相対パスでソートすることに時間を費やすことをお勧めします。

固定ディレクトリ システムとソース管理の問題は、プロジェクトを分岐したり、複数回チェックアウトしたりできることです。

また、Subversion も優れていますが、Mercurial または Git を検討する価値があります。これらは、Subversion ではできないさまざまな種類のワークフローを可能にします。リポジトリをどのように構築するかを考えるにはもう少し手間がかかりますが、それだけの価値があります。これは sourcesafe からの大きな飛躍であり、私の経験から、sourcesafe から来た多くの人々は、最初は本当に苦労したり、Subversion / git / mercurial を嫌ったりします。これらはすべて、バージョン管理についてもう少し詳しく理解する必要がありますが、非常に優れたツールであるため、それは良いことです。

于 2013-04-09T04:49:01.540 に答える