0

別の Subversion リポジトリに保持したい Zend_Framework アプリケーションがいくつかあります。ただし、これらのアプリケーションは、同じデータベース抽象化レイヤーと、同じ共通コンポーネントのいくつかを共有しています。

何とかアプリ間で共通点を共有したいと考えています。私たちが持っている現在のアイデアは次のようになります

svn://foo/itg-common/trunk
svn://foo/itg-common/branches/foo
svn://foo/itg-common/branches/production

svn://foo/itg-app/trunk
svn://foo/itg-app/branches/foo
svn://foo/itg-app/branches/production

ここで、itg-app リポジトリに itg-common リポジトリへの外部参照を持たせたいと考えています。問題は、たとえばitg-app/trunk/commonにリンクしたいitg-common/trunkitg-app/branches/foo/commonにリンクしたいitg-common/branches/fooなどです。つまり、一般的なパターンはitg-app/$BRANCH/common -> itg-common/$BRANCHです。

原則として、これらの外部オブジェクトを作成できますが、マージしようとすると常に問題が発生します。$/trunkたとえば、 からへのマージは、を指すようにするプロパティを$/branches/production上書きします。svn:externals$/branches/production/commonitg-common/trunk

これは理にかなっていますか?もしそうなら、この問題を回避する方法はありますか?そうでない場合、その理由は何ですか?代わりに何をすべきでしょうか?

4

2 に答える 2

3

これは理にかなっていますか?もしそうなら、この問題を回避する方法はありますか?そうでない場合、その理由は何ですか?代わりに何をすべきでしょうか?

prodigitalson がすでに述べたように、SVN の外部は、基本的に、独自のリリース サイクル、ブランチ、タグなどを備えた、まったく異なるソフトウェアと見なされます。それらはすべてタグまたはリビジョンに固定されています。これは、外部ソースからのコードを使用するかなり制限されたモデルですが、それが SVN がサポートするものです。これから迷い、あなたは独りです。(それについての私の個人的な戦争の話については、以下を参照してください。)

私があなただった場合、私が再考するもう1つのことは、別のリポジトリを参照していることです。現在のプロジェクトまたはリポジトリ ルートに対して相対的に外部を参照する IME は、絶対パスを使用するよりもはるかに優れています。プロトコルを から に変更する可能性を考えてみてsvn:くださいhttps:。(私はこれが会社で起こっているのを見たことがあります。すべての外部を変更するためにスクリプトに大きく依存しているにもかかわらず、この移行は関係者全員が悪夢を見続けている混乱でした.)単一のリポジトリ。


私が働いている会社は、同様の問題に直面したばかりです。さまざまな製品間で共有される多くのコードがあります。これは外部を介して行われ、これらの外部参照プロジェクト自体が外部を持っています。いくつかの箇所では、再帰的エクスターナルが 3 層にまで減っていますが、将来さらに増えることはすでにわかっています。これらすべてのコードは常に作業されており、外部から参照するプロジェクトのトランクを参照できるようにしたいと考えています。なぜなら、自動テストがそれを有利にし、これらすべての再帰的な外部のリリースを管理するには、私たちがまったく余裕のない労力を必要とするからです。

しかし、この設定でプロジェクトを分岐することは、プロジェクトの外部をピン留めするだけでは十分ではないため、プロジェクト自体がピン留めされていないエクスターナルを参照するため、非常に苦痛です。外部経由で project を参照し、次に外部経由でproject を参照する にプロジェクトfooを分岐する必要がある場合はいつでも、の外部である の分岐で外部であるの分岐が必要になります自体。に半ダースのエクスターナルがあり、そのうちの半分は独自のエクスターナルを持ち、3 つ以上のレイヤーを再帰するものもあり、プロジェクトが知らないはずのプロジェクト用に作成されたブランチが散らばっていると想像してください。foo'XXXfoo'XXfoo'Xfoo'fooXXX

私たちの解決策は、再帰的に、A)すべての外部変数を参照先のブランチに置き換えるか、B)によって参照される(それ自体が を参照する)外部変数のブランチをセットアップするXことです。ただし、作成時にこれを設定するのは非常に複雑であり、ばかげた間違いを犯す可能性が十分にあるため、スクリプトを使用してプロジェクトとその外部を再帰的に降下させ、そのすべてを行います。foo/branches/externals/foo'/X<project>/branches/foo'foo/branches/externals/foo'/Xfoo/branches/externals/foo'/XXfoo'

于 2011-10-27T09:16:04.307 に答える