9

いくつかのサブバージョン リポジトリがあります。1 つは共通コード用で、もう 1 つは各トップ レベル プロジェクト用です。最上位プロジェクトには、共通リポジトリのトランクへの svn:external リンクがあります。

プロジェクトのリリースをビルドする前に、最上位プロジェクトのブランチを作成し、共通リポジトリに並列ブランチも作成します。

分岐した最上位プロジェクトの svn:external プロパティが共通ディレクトリの並列分岐を指すようにするにはどうすれば自動的にできますか? 現在、共通リポジトリの「トランク」を指しています。現在、分岐プロジェクトでこれを手動で編集する必要があります。

ありがとう

4

1 に答える 1

8

私があなたを理解しているなら、あなたはそれを確認して同じブランチfooを共有したいと思っています。はあなたのマスター プロジェクトであり、どこかに を指している があります。ブランチを作成するときは、 が同じブランチを使用していることを確認する必要があります。これを確実にする唯一の方法は、(ほとんどのサイトがそうであるように) プロジェクトのルートではなく、リポジトリのルートにおよびディレクトリを使用してリポジトリを作成することです。barfoosvn:externalsbarfoobartagsbranches

次に、相対外部参照を使用して、バックをfoo含むディレクトリから を指すことができます。また、foo と bar に同じタグを付けると、foo と bar の関係が維持されます。svn:externalbar

$ svn propset svn:externals ../../bar common

ブランチがリポジトリのルートにある場合、commonディレクトリは の同じブランチを指しfooますbar

大きな問題snv:externalsは、注意しないと、リンク先のディレクトリの常に変化するバージョンを指していることです。誰かがこれをしたとしましょう:

$ svn propset svn:externals /projects/bar/trunk common

私のfooプロジェクトで。fooリリースしてタグにコピーします。ただし、commonタグ付けしたディレクトリは、誰かが更新すると変更されますbar/trunk。これにより、再構築がほぼ不可能になりfooます。

を使用するときはsvn:externals、 のタグ付きバージョンまたは特定のリビジョンにリンクしていることを常に確認しますbar。また、特定のリビジョンにリンクしている場合は、誰かがディレクトリを削除することを決定した場合に備えて、URL をそのリビジョンにペグします。私は私のsvn:externals財産にリンクしています。

プロパティを自動的に更新する Subversion には何もありませんがsvn:externals、次を使用してディレクトリ ツリー上のすべての svn:externals を検索できます。

$svn propget -v -R svn:externals .

私は、svn:externals通常、それが価値があるよりも大きな苦痛になることを発見しました.

代わりに、ビルドされたオブジェクトbarまたは圧縮されたソースのコピーをリリース リポジトリに保存し、ビルド手順の一部として、オブジェクトまたは圧縮されたソースをリリース リポジトリからコピーします。

Maven プロジェクトを行っていない場合や、Java ベースのプロジェクトで作業している場合でも、Nexus や Artifactory などの Maven サイト リポジトリをリリース リポジトリとして使用しています。ローカルの Maven リポジトリは、依存パッケージをアップロードおよびダウンロードするために必要なすべてのツールを提供します。さらに Maven には、コードが変更されないリリースリポジトリと、コードのリリースを計画しているスナップショットリポジトリの概念がありますが、それは変わる可能性があります。barこれは、 で必要なもののために変更される可能性があると思われる場合に役立ちますfoo

于 2010-11-22T22:59:08.123 に答える