2011-02-05 7 views
5

最近のプロジェクトでは、機能不全に対処するためにオープンソースライブラリを修正する必要がありました。私はSVNのベストプラクティスに従って "ベンダーソース"リポジトリを作成し、そこで変更を加えました。私はまた、そのプロジェクトのメーリングリストにパッチを提出しました。残念ながら、プロジェクトには数人のメンテナーしかいませんし、更新をコミットするのが非常に遅いです。サードパーティのオープンソースライブラリへの変更を管理するためのベストプラクティス?

ある時点で、私はライブラリが更新されることを期待しています。私のプロジェクトでは、アップグレードされたライブラリを使用したいと考えています。しかし今、私は潜在的な問題を抱えています...

私のパッチがこの将来のサードパーティライブラリのリリースに適用されるかどうかはわかりません。私のパッチがアップグレードされたコンポーネントの内部実装とまだ互換性があるかどうかもわかりません。そしておそらく、他の誰かが私のプロジェクトをその時点まで維持しています。

特別な変更を加えたことが明確になるようにライブラリを特別な方法で指定しますか(例:commons-lang-2.x-for-my-project.jar)?私はちょうどパッチを文書化し、READMEにSVNの場所とメーリングリスト項目へのリンクを参照する必要がありますか?私が考えることができるオプションは、アップグレードのシナリオでは愚かではないようです。

このためのベストプラクティスは何ですか?

答えて

4

ベンダーブランチ SVNの「赤い本」の章がこの井戸をカバーしています。

http://svnbook.red-bean.com/nightly/en/svn.advanced.vendorbr.html

...
今、あなたは面白い状況に直面する:この章の例では、密接にあなたの状況に合わせているようです。プロジェクトには、パッチファイルや本格的な代替バージョンのファイルやディレクトリの使用など、いくつかの方法でサードパーティのデータにカスタム変更を加えることができます。しかし、これらはすぐにメンテナンスの頭痛になり、カスタム変更をサードパーティコードに適用し、追跡するサードパーティコードの各バージョンでこれらの変更を再生成するためのメカニズムが必要になります。

この問題の解決策は、ベンダーブランチを使用することです。ベンダーブランチは、サードパーティのエンティティまたはベンダーが提供する情報を含む、独自のバージョン管理システムのディレクトリツリーです。プロジェクトに吸収されるベンダーのデータの各バージョンは、ベンダードロップと呼ばれます。
は...

+1

私はこの章を以前に一度読んでいましたが、私は正しいことをやっていました。この議論には、私がブラッシングしたいくつかの非常に重要なニュアンスがあります。私にその章をもう一度読ませてくれてありがとう - それは今より多くの意味があります。 –

+0

@Jeff - フィードバックありがとうございます。私はそれが助けてうれしいです。 –

1

ほかに限り質問のソース制御部に関しては良いですがバートの回答から、私はまた、あなたの変更をカバーするいくつかのユニットテストを書くことをお勧めしたいです。

私は間違ってはいませんが、私は単なる1つか2つの単体テストを書いて、それを忘れてはいけないと言っているわけではありません。回帰テスト/ユニットテストが実際に機能するためには、それを体系的に実装する必要があり、プロジェクトの自動構築プロセスの一貫した部分になる必要があります。

明らかに、これは簡単ではありません。あなたがいったん立ち去ると、あなたの代わり/あなたの同僚がテスト戦略を引き続き使用するという保証はありません。そのためにも、文書化し、洗練され、簡単にし、常に同僚や管理職を教育しなければならないものがあります。

関連する問題