14

私の状況: 私はいくつかのコンポーネントを持っていますが、それらは時々変更され、多くの異なるプロジェクトで共有されています。各プロジェクトは、これらを /depends というサブフォルダーに配置します。depends には、すべての共通コンポーネントの svn externals の束が保持されます。

svn:externals は私に多くの時間と苦痛を与えています。

  • プロジェクト ルート フォルダーのログを表示しても、svn:external フォルダーの変更は表示されません (ただし、コミットと更新は svn:externals で機能します)
  • 分岐すると、svn:externals は分岐されません。
  • svn:externals には分岐がないため、通常、変更はトランクを壊します。
  • タグはその外部をフリーズしません。これは、タグ付けの目的を本当に無効にします。

私はいくつかのプロジェクトを持っていることを思い出してください (この議論では、それぞれが同じ外部を使用する 10 としましょう)。そのため、プロジェクトごとに通常のコミット済みディレクトリを保持すると、マージに多くの時間がかかります。

私の状況に適した代替手段はありますか?

4

5 に答える 5

12

問題の一部は、共有コンポーネントのリリースサイクルがプロジェクトのリリースサイクルと必ずしも一致しないことだと思います。

ここで説明する共有コンポーネントには、独自のリリースサイクルがあります。言い換えると、それぞれが個別のプロジェクトとして管理される可能性があります(または、それらのコレクションが個別のプロジェクトとして管理される可能性があります)。リリース/バージョン番号はすべて独自のものです。

svn:externals定義には特定のリビジョンを含めることができることに注意してください。

これにより、共有コンポーネントを使用する各プロジェクトを、その共有コンポーネント(または共有コンポーネントのコレクション)の特定のリリース/リビジョンに対して開発できるようになり、プロジェクトに安定した一連の依存関係が提供されます。HEAD各プロジェクトは、必ずしも上にあるとは限らないコンポーネントの特定のリビジョンを調べているため、コンポーネントを変更してもプロジェクトは中断されませんtrunk

これは前もってより多くの作業のように見えるかもしれませんが、長期的には、このプラクティスはこのタイプの状況に対してより良い変更管理プロセスを提供すると信じています。

于 2008-10-30T02:48:39.407 に答える
6

@ケンに同意します。

特定のリビジョンなしでまったく使用しないことを強くお勧めします。svn:externalsリビジョンなしでは、古いチェックアウトを再作成することは不可能です。タグ付け時に外部のみをピン留めすると、タグ付けしたものしか再作成できなくなります。トランクで中間リビジョンを再作成したい場合は、自分で行ってください。

外部を分岐しない理由の 1 つは、それをどのように行うべきかが明確でないことです。プロジェクト A への外部が tags/2.0.0 を指していて、プロジェクトの 3.4.x ブランチを作成している場合、プロジェクト A の外部は何を指す必要がありますか? Aブランチもプロジェクトする必要がありますか? もしそうなら、どのバージョンに?

プロジェクトのリリース サイクルが異なる場合、一般に、分岐時の外部の適切な動作を定義することは不可能です。

(svncopy.plタグ付け中に外部を固定できるようにするスクリプト (Subversion ソース配布に含まれている) をまだ見ていない場合は、スクリプトを確認することをお勧めします。)

svn:externals は、開発中の一連のコンポーネントをまとめるために使用すると、非常にうまく機能しないことがわかりました。エクスターナルは、あまり動かない外部コンポーネントを持ち込むのにうまく機能し、分岐の問題がありません。

于 2008-10-30T07:56:28.207 に答える
5

同様の質問でこれを述べました:異なるリポジトリからの外部svn:externals参照として使用する必要があります。そのため、異なるリポジトリに存在するコンポーネント、モジュール、サードパーティ ツールなどを参照する必要があります。svn:externals

外部を使用して同じリポジトリを指すことにより、「シンボリックリンク」の動作をエミュレートするために使用しないでください。svn:externals

ほとんどの場合、ビルド構造を変更するか、チェックアウト スクリプトとスパース チェックアウト機能を使用することで、このような問題を解決できます。

svn:externals には多くの問題があり、それらのほとんどは確認、追跡、および修復が困難です: ここで例を参照してください

  • コミットは外部にまたがることはできません (アトミック コミットはありません)
  • ブランチは外部をブランチしません
  • タグは外部を「フリーズ」しないため、後のビルドでは異なる/壊れたビルドになる可能性があります
  • マージと再統合 マージは外部では機能しません

外部リポジトリを使用して他のリポジトリを指す場合、ほとんどの場合、これらの問題は発生しません。

于 2008-10-30T15:59:56.970 に答える
2

いわゆるベンダー ブランチを使用してみることができます。

http://svnbook.red-bean.com/en/1.5/svn-book.html#svn.advanced.vendorbr

これは、サードパーティのライブラリを扱う場合に役立つ戦略ですが、あなたのような状況でも役立つ可能性があります。

于 2008-11-03T17:59:22.090 に答える
0

svncopy.pl(この質問で言及されています)は、のパスをsvn:externalsブランチ内の新しい場所に書き換えます。

于 2011-07-12T18:07:29.983 に答える