フレームワークランタイムをソース管理下に保存することは良い習慣ですか?


9

多くのソフトウェアショップがバイナリをソース管理下に置いていることを知っています。しかし、私たちのショップは、DirectXランタイム、CUDA、nVidia Optixなど、フレームワーク全体をリポジトリに格納するようになりました。

開発マシンのセットアップをより簡単にすると言われています(おそらく最新のものを入手してコーディングを開始します)。ただし、リポジトリが大幅に肥大化し、無関係な履歴が発生します。

このような使用パターンを見たことがありません。それは良い習慣だと思いますか?

[編集:]分離されたサードパーティのバイナリをソース管理することに問題はありません。質問は、通常10以上のバイナリで構成されるフレームワークランタイム全体に関係しています。極端な例として、Windows SDKを取り上げます(これはリポジトリに保持しません。感謝しますが、原則として違いはありません)。


1
最新または関連するフレームワークランタイムをダウンロードするスクリプトを作成し、そのスクリプトをバージョン管理下に置くことができます。
Basile Starynkevitch、2012年

2
[リポジトリ]に無関係な履歴がかかると思うのはなぜですか。より具体的には、なぜ歴史は無関係であると思いますか?コードがこれらのフレームワークとライブラリを参照している場合、リポジトリの特定のリビジョンでどのバージョンが使用されていたかを知ることは非常に役立ちます。
James McNellis、2012年

肥大化については同意します(特に、これらのランタイムが複数のプロジェクト間で共有されている場合)が、無関係な履歴に関する部分は理解できません。たとえば、使用しているランタイムのバージョンがかなり関連している場合の変更...
6502

アップデートが出てくると、開発者のマシンのイメージを作成する方が簡単ではないでしょうか?
ラムハウンド2012年

@ラムハウンド:それは私が押し込もうとしている正確な方向です。足りない欠点はあるのかと思いました。
Ofek

回答:


6

以下の理由により、バイナリは通常、バージョン管理システムにはあまり適していません。

  • バージョン管理機能(マージ、差分)の恩恵を受けない
  • 彼らはリポジトリのサイズを増やします...
  • ...重要なのは、単純な共有ディレクトリであるNexusのようなアーティファクトリポジトリ(クリーンアップが簡単:+ !)とは対照的に、VCSからバージョンを簡単に削除しないためです(VCSは履歴を保持するために作成されます)。cdrm
  • それらはVCSでテキスト、パス+バージョンの宣言として参照する必要があります関連する履歴をそのように保持し、バイナリバージョンの変更をそのテキストファイルの変更として記録できます(Nexusを使用している場合はpom.xmlなど)例えば)

1
最後のポイントは非常に貴重です。
Noufal Ibrahim 2012

ありがとう!C ++プロジェクト用の同様のアーティファクトリポジトリを知っていますか?さらに良い-多分TFSと統合するもの?
Ofek Shilon、2012年

2
@OfekShilon:Nexusは理論的にはあらゆる種類のアーティファクトを保存できます。ただし、.NET / C ++のストレージと依存関係の管理には、NuGet:nuget.codeplex.comもあります。.Netの例:lostechies.com/derekgreer/2011/09/20/…。C ++プロジェクトもサポートする必要があります:nuget.codeplex.com/discussions/280649
VonC、2012年

@OfekShilon TFSをNuGetとリンクできます(例:coolthingoftheday.blogspot.com/2011/08/…、hanselman.com / blog / )。TFSNuGetterも参照してください:nugetter.codeplex.com
VonC

6

バイナリアセットのバージョン管理で問題ありません。生成されたファイルのバージョン管理には反対です。

また、環境設定は開発とは異なります。私たちは主にPythonで開発しており、virtualenvと呼ばれるツールを使用して、プロジェクトの軽量の隔離された環境(ライブラリを含む)を作成できます。ソースをチェックアウトすると、そこにこのvirtualenvを構築するセットアップスクリプトがあります。マニフェストを使用して、必要なライブラリのバージョンなどを指定します。これはバージョン管理されていません。セットアップスクリプトのみです。

メインプロジェクトの下にフレームワーク全体を投げると、履歴が乱雑になり、深刻な混乱を招きます。これはプロジェクトの一部ではないため、別の方法で処理する必要があります。


3

フレームワークのバージョンで構成管理を行うことは、一般的に良い考えです。コードで特定のDirectXバージョンが必要な場合は、そのバージョンを簡単に入手でき、古いバージョンのソフトウェアをチェックアウトすると、外部の依存関係を簡単に特定できます。

ここで私が良い考えだとは思わないのは、これらのバイナリを格納するために典型的なバージョン管理システムを使用することです。当社では、フレームワーク、ライブラリ、外部ツールのすべてのバージョンをネットワークドライブのサブフォルダー構造に保存しています。私たちが理にかなっていると思う場合は、どのツールバージョンがどのソフトウェアバージョンに属しているかを文書化するreadmeファイルを用意しています。または、可能であれば、特定のバージョンをインストールまたは使用するためのスクリプトを用意しています。これらのREADMEファイルとスクリプトのみがバージョン管理に入ります。

また、ツールによっては、古いバージョンのツールとライブラリを再構築する必要がある可能性があると考える限り、古いバージョンを保持します。こうすることで、非常に古いlibs&toolsが非推奨になったときにネットワークドライブから削除できるようになります(もちろん、外部メディアにアーカイブがある場合に備えて)。


2

バイナリはどこかにあるべきだと思います。特にそれらが大きく、チェックアウト時間が長くなる場合は、リポジトリの外に保管することをお勧めします。私はそれが悪い習慣であるとは思わないでしょうが、それは私が見たものではありません。

組織がさまざまなランタイムバージョンを対象とするプロジェクトを多数持っている場合、これは実際には良い考えです。これにより、適切なプロジェクトで作業しているときに、適切なランタイムバイナリを使用できます。


これに対処するための質問を明確にしました。
Ofek Shilon、2012年

1

私は個人的にこれを非常に悪い習慣だと思っています。インストール手順を記載したWikiをセットアップし、それに必要なバイナリをアップロードすることを好みます。これらのファイルは新しい開発者のみが必要とするものであり、他のすべての人のリポジトリを膨らませる必要はありません。


1

これには十分な理由があります。つまり、外部の依存関係なしに、必要なすべてのものが1つの場所にあるということです。

これはあなたが思っているよりもずっと重要です。これにより、すべてが社内にあるため、ベンダーサーバーのアーティファクトに依存せず、数年後にはなくなる可能性があります。

リポジトリ膨張について。これは、クローン作成や更新が遅くなるため、VCSが完全なローカルコピーを保持している場合にのみ問題になります(gitはこれを行い、cvsはしません)。その代わりに、各開発マシンにコピーがあり、何らかの理由で中央バックアップスキームがいつか失敗した場合に会社を救うことができます。

それは優先順位または方針の問題です。決定が慎重である限り、私はこれで大丈夫でしょう。


2
サードパーティのライブラリを独自のNexusまたはNuGetサーバーなどのアーティファクトリポジトリに保存する場合、「ベンダー」サーバーがなくなることを恐れる必要はありません。つまり、ローカルに保存してください。VCSを使用しないでください。それらはそのようなファイルを保持することを意図していません。
VonC、2012年

@VonCは、インフラストラクチャと機能する方法論に依存します。「単一のバイナリを1回だけ保存する」場合、VCSは完全なアーティファクトリポジトリと同じくらいうまく機能します。また、インフラストラクチャをシンプルに保ちます。私は主張していません-OPは誰かがそのような使用パターンを見たことがあるかどうか尋ねました。

OK。私はそのような使用パターンを見てきました。そして、私はそのようなリポジトリを管理する必要がありました(SVNやClearCaseのようなVCSを主に集中化し、GitのようなDVCSの使用を見たことはありません)。そして、これは一般的に混乱です。ベンダーライブラリを再検討して、単一のバイナリを一度だけ保存することはめったにありません。パッチに対処する必要があります。それらの多く。さらに、ストレージが唯一の目標ではありません(そうであった場合、VCS 間違いなく潜在的なソリューションになる可能性があります)。依存関係管理です。そして、NexusまたはNuGetが提供するもの(管理とクリーンアップが簡単なことに加えて)のストレージ。
VonC、2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.