7

私たちの開発では多くのオープンソース コードを使用しており、これらの外部依存関係を管理する最善の方法を見つけようとしています。

現在の構成:

  • LinuxとWindowsの両方で開発中
  • 私たちは独自のコードにsvnを使用しています
  • 外部の依存関係 (boost、log4cpp など) は svn に保存されません。代わりに、それらを ./extern (または Windows では c:\extern) の下に置きます。そのように更新することができないため、それらをリポジトリに入れたくありません。これらのいくつかは常に更新されています。

私の質問

  • 外部コードを変更する必要がある場合はどうすればよいですか? 現在、extern_hacks という名前の svn リポジトリにフォルダーを作成しており、そこに変更した外部コードを配置しています。次に、ファイルを外部ディレクトリ構造にリンク (または Windows ではコピー) します。ファイルのコピーを追跡するのは難しく、ファイルが2つのリポジトリにある場合、svnから更新するのは非常に難しいため、このソリューションには問題があります(変更されたファイルの私のもので、元のリポジトリはsourceforgeと言います)

  • 外部依存関係のバージョンを管理するには?

他の人がこれらの問題にどのように対処しているかを聞くことに興味があります。ありがとう。

4

5 に答える 5

6

それらを svn に保管し、ベンダー ブランチとして管理しています。それらを外部にルーズにしておくと、以前のビルドに戻ったり、以前のビルドのバグを修正したりすることが非常に難しくなります (特に、バグが外部依存関係の変更によるものである場合)。

それらをsvnに保持することで、多くの頭痛の種が解消され、新しいワークステーションでコードベースをすばやく操作できるようになります.

于 2008-10-07T16:47:56.170 に答える
2

と言う理由がわかりません

そのように更新することができないため、それらをリポジトリに入れたくありません。これらのいくつかは常に更新されています。

あなたは本当にする必要があります

  1. ソース管理に外部依存関係を含め、定期的に更新してからテスト、テスト、テストします。

  2. 外部依存関係の更新を使用してビルド プロセスを調整します。

コードが何かに依存している場合、それがいつ更新/変更されるかを制御する必要があります。これらの依存関係がいつでも更新される可能性があるスペースでコーディングすることは、間違いなく見つけられるので、あまりにも苦痛です。私は個人的にオプション1を好みます。

于 2008-10-07T16:45:20.183 に答える
1

このようなことをしなければならないときは、外部ソースを外部として追加し、パッチを適用しました。パッチには、外部ソースに対する私の変更が含まれています。そのため、実際にはパッチのバージョン管理のみを行っています。外部コードに「劇的な」変更がない場合、ほとんどの場合、これは機能します。

于 2008-10-07T16:50:59.843 に答える
0

Mavenを検討しましたか?これは、依存関係を管理するための優れたサポートを備えたビルド システムです。プロジェクトごとに、必要な依存関係をそのプロジェクトの一部として xml ファイルで指定できます。外部ライブラリは、バージョン管理システムとは別の依存関係リポジトリ (この場合はArtifactory ) に保持され、単なるネットワーク ドライブにすることができます。また、異なるバージョンのプロジェクトを管理することもできます。

于 2008-10-07T16:50:06.180 に答える
0

次の理由から、Maven を検討する際には注意が必要です。

  • 現在のバージョン管理システムを備えたリポジトリが既にあるシステム内の別のリポジトリです。
  • それ(Maven)は、すべての開発者が持つ唯一の「共通バージョン管理」、ファイルシステム(ファイルに添付されたメタデータやプロパティ、誰が何をいつ変更したかに関する適切な履歴がないことを意味します)に基づいています)

サードパーティを扱うときは、バージョン管理システムに含めることを検討できますが、パッケージ化された方法です。これは、ファイルの数を可能な限り少なくするために、ソースとドキュメントを圧縮した非常にコンパクトな方法です。

そうすれば、展開するファイルの数が少ないため、これらの (多くの) サードパーティ ライブラリの展開を簡単に管理できます。

さらに、それらをソース管理下に置くことで、ハッキングされたライブラリのパッケージ化 (または圧縮) バージョンを格納するブランチ (たとえば、「ハック」ブランチ) を作成できます。

外部の方法で保存できるのは、これらのライブラリを表す解凍された完全なファイルのセットです。これらのライブラリには実際の開発がないか、時間厳守のハックです。通常、あなたの仕事は既存のライブラリを開発することではなく、使用することですプロジェクトの一部の機能をより高速に実装するために、それらを(少し変更しても)。

ある時点で、ハッキングされたバージョンと公式バージョンを比較する必要がある場合は、svn から適切な「ハッキングされた」バージョン番号を取得し、解凍して、公式 (および外部に保存されている) バージョンと比較します (winmerge を使用)。例えば)

于 2008-10-07T21:51:17.603 に答える