2009-09-01 4 views
0

ここではSOと他の場所で、VCSの共通ライブラリ " を維持する"について多くの質問があります。つまり、プロジェクトfooとbarはどちらも libbazに依存しており、質問者は各プロジェクトのVCSにlibbazのソース をどのようにインポートするべきか疑問に思っています。"library"という言葉を濫用する

私の質問は次のとおりです。 libbazがライブラリである場合、fooはその ソースコードをまったく必要としません。この方法では、 (gnulibなど)を使用することが合理的に設計されたライブラリがいくつかありますが、ほとんどの場合、fooとbar はライブラリにリンクする必要があります。

私は考えていると思います。ライブラリーのソースを ソースツリーにカット&ペーストした場合、将来の更新については、ライブラリにはあまり気にしません。 アップデートが気になる場合は、 ライブラリにリンクし、ライブラリのメンテナーが安定したAPIを維持するように信頼してください。

APIが安定していると信用しない場合、盲目的に ソースのコピーを更新することができます。何が得られますか?

質問を要約すると、 ライブラリのコピーを、そのライブラリ にリンクしてそれを依存関係として必要とするのではなく、プロジェクトのソースコードに保持する必要があるのはなぜですか?

唯一の答えが「依存したくありません」なら、 はあなたのアプリと一緒にライブラリのコピーを配布しますが、 は完全に別々にしておきますか?

+1

これをより読みやすくするためにフォーマットできますか? –

+0

また、Cなどの言語についても言及していることに注意してください。PHPやRubyなどの言語では、外部ライブラリをプロジェクトの一部にすることは非常に意味があります。また、Gitには、これを多く支援する "サブモジュール"という概念があります。 –

+0

私はちょうどテキストをフォーマットし、75%を得ました。しかし、今はもっと読みやすくなっています。 –

答えて

2

サードパーティの依存関係を管理するためのベンダーブランチの使用は、Subversionの書籍でdiscussed in some depthです。私が理解しているように、基本的な利点は安定したAPIとすべての開発者のためのライブラリの一貫性と、同じバージョン管理システム内のカスタム修正を管理する能力です。

+0

新しいバージョンのライブラリをインストールしないことで、安定したAPIを保証できます。カスタム変更を行う場合は、ライブラリをフォークする必要があります。このようなVCSを使って依存関係を管理しようとすると、ちょっと狂ったような気がします。 –

+2

ライブラリーをフォークすることは、将来のすべての改善を余儀なくされることを意味します。ベンダーブランチを使用すると、ベンダーコードの最新バージョンが取得されたままで変更内容が保持されます。これは問題を引き起こす可能性がありますが、変化するライブラリの上にユーザーモッズを維持するためのより良い方法はわかりません。 –

1

私は現在取り組んでいるプロジェクトで、メインのコード(1つのSubversionプロジェクトに含まれています)と、独自のSubversionモジュール内にある様々な場所のさまざまなライブラリを用意しています。 Visual Studioソリューションは、それぞれのプロジェクトを個別に管理し、最後にそれらをリンクします。 Unixやそれに類するOSで作業していたなら、同じことをします。

私が見ている唯一の欠点は、頻繁に変更されるライブラリの1つを更新することを時々忘れてしまい、私が気がつくまでコードがコンパイルされないことです。同じモジュールにライブラリがあれば、問題はありません。 (柔軟性の向上と異なるメインプロジェクトの異なるライブラリを使用する能力はあまりにも大きい)

APIはここでは赤い鳴きです。変更された場合は、メインコードをいずれかの方法で更新する必要があります。ソース対バイナリライブラリの問題です(メインプロジェクトと一緒にコンパイルするか、コンパイルしないか)。