私は小規模な開発者のチームと協力しています。バージョン管理にはSubversionを使用しています。ソフトウェアの多くは組み込みシステム用です。
社内で開発されたソフトウェア/ファームウェアモジュールを複数のプロジェクト間で共有するためのかなり便利な方法をセットアップしたいと考えています。望ましい機能は次のとおりです。
共有モジュールを使用するすべてのプロジェクト内で共有モジュールをプルダウンし、適切な場所にビルドできるようにするため。 (簡単に圧縮/エクスポートできます。)
可能であれば、どのモジュールが共有モジュールを使用しているかを追跡できるようにします。 (つまり、「どのプロジェクトがFancySharedWidgetを使用するか」という質問に答えられるようにするためです。)
svn:externals (明示的なリビジョン番号を含む)を使用した合理的なリポジトリ設定/フォルダ階層は、#1にうまく適合すると考えています。正しい?
Svn:externalsで要件#2を満たすことはできますか?
a。多分コミット後のフックで、外部のsvnプロップがいつ追加または変更されたかを追跡しますか?そのようなスクリプトはすでに存在していますか?
ありますか ツール 仕事へのアプローチ? (できれば に加えて svnとの組み合わせ。 svnから離れるように会社を説得することを私は期待していません 、私は個人的に他に何があるか聞きたいです。)
4.メタ:この投稿はここにありますか、それとも Stack Overflow にありますか?
あなたがしようとしていることに外観を使用できますが、最初に、本当に必要かどうかを確認する必要があります。私たちのチームにとっては、共有モジュールをshared_libs
という名前のフォルダーの下に置き、すべての使用プロジェクトに相対パスでそのフォルダーを参照させるだけで十分です。ただし、プロジェクトフォルダーの下の別のローカルフォルダーにlibs /共有モジュールを配置する場合は、外部が必要です。そうすれば、必要な状況に対処できます
共有モジュールLバージョン/リビジョン1.0を参照するプロジェクトA
共有モジュールLバージョン/リビジョン1.1を参照するプロジェクトB
ローカルの開発環境で同時に両方とも。エクスターナルを使用することで、開発環境のさまざまな場所にさまざまなコピーを持つように制御できるだけでなく、そこに配置したいlib/moduleのリビジョン、ブランチ、タグ付きバージョンをきめ細かく制御することもできます。
ただし、私たちにとっては、同じlibの異なるバージョンを本番環境に置くだけで十分です(共有ライブラリの大部分ではなく、いくつかの外部を使用します)。テストとデプロイメントの場合、ほとんどのビルドスクリプトは、SVNの助けを借りずに、コンパイルされた結果をテストフォルダーまたはデプロイメントフォルダーにプルします。
外部を使用することの欠点は、管理作業が増えることです。それを使用する各プロジェクトで、新しいバージョンのライブラリに明示的に更新する必要がある場合があります。ライブラリのソースコードを編集して外部のチェックアウトフォルダーに直接コミットするには、SVNのペグリビジョンメカニズム(またはおそらく禁止したいもの)を利用する必要があります。また、共有ライブラリが他の共有ライブラリに依存している場合は、おそらく再帰的に、ローカルファイルシステム内のそれらすべてのライブラリの相対パスが常に互いに類似していることを確認する必要があります。これが必要なものか、必要なものか、あるいはその両方かどうかを検証する必要があります。
2番目の質問について:SVNは依存関係を追跡するための実際の適切なツールではありません。依存関係が保存される唯一の信頼できる場所は、makeファイル/プロジェクトファイル/ビルドスクリプト/リンカーファイル(ビルドプロセスに使用するものはすべて)なので、最初の提案は、これらのファイルをスクリプトでスキャンして、依存関係情報を収集することです。それにもかかわらず、SVNエクスターナルを使用する場合結果的にすべての共有モジュールの依存関係、あなたのリポジトリのプロジェクトを反復し、そこに追加されたエクスターナルを収集するスクリプトを書くことができると私は確信しています。そして、私はあなたがそれのためのフックを必要とするとは思わない、ちょうど ここに示されている のように、このためにsvn propget svn:externals
を利用する。