2011-10-27 9 views
0

別々のSubversionリポジトリに保存したいZend_Frameworkアプリケーションが2つあります。ただし、これらのアプリケーションは、同じデータベース抽象化レイヤーおよび同じ共通コンポーネントのいくつかを共有します。1つのセットアップはどのようにSubversion外部と関連していますか?一つか?

何とかアプリケーション間で共通のビットを共有したいと考えています。我々が持っている現在の考えは今

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-共通リポジトリへの外部参照を持っているITGアプリのリポジトリをしたいと思います。問題は我々が求めていることである。 itg-app/trunk/commonitg-common/trunkに、 itg-app/branches/foo/commonitg-common/branches/fooに、それにリンクすることなどがあります。つまり、一般的なパターンは itg-app/$BRANCH/common -> itg-common/$BRANCHです。

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

これは意味がありますか?もしそうなら、この問題を回避する方法はありますか?そうでない場合はどうしたらよいでしょうか?代わりに何をすべきですか?

答えて

3

これは意味がありますか?もしそうなら、この問題を回避する方法はありますか?そうでない場合はどうしたらよいでしょうか?代わりに何をすべきですか?すでにprodigitalson saidとして

、SVNで外部は基本的にこのモデルによるなど、独自のリリースサイクル、枝、タグ、で、ソフトウェアの全く別の作品と考えられている、あなたはいくつかのトランクに固定されていない外観を持つべきではありませんタグまたはリビジョンのいずれかに固定されるようにしてください。これは、外部ソースからのコードを使用するかなり制限されたモデルですが、それはSVNがサポートしているものです。これから迷い、あなたはあなた自身である。 (それについての私の個人的な戦争の物語については、以下を参照してください。)

私があなたが別のリポジトリを参照していたなら再考するもう一つのことです。現在のプロジェクトまたはリポジトリルートに対して相対的に外部を参照するIMEは、絶対パスを使用するよりもはるかに優れています。プロトコルをsvn:からhttps:に変更する可能性があると考えてください。 (私はこのことが企業に起こっているのを見ており、すべての外部を変更するためのスクリプティングに頼っているにもかかわらず、この移行は関係者全員が悪夢を抱いているという混乱でした。)外部への相対パスは単純により堅固ですが、 1つのリポジトリ


私が働いている会社は同様の問題に直面しています。我々は、異なる製品間で共有される多くのコードを持っています。これは外部から行われ、外部から参照されるプロジェクトには外部自体があります。いくつかの箇所では、再帰的な外部の3つの層に分かれており、将来はもっと多くのものがあることをすでに知っています。これらのコードはすべて絶えず作業されており、自動テストではそれを排除し、すべての再帰的な外部のリリースを管理するには単純に手を加えることができない努力が必要なため、参照するプロジェクトのトランクを参照するようにします。

しかし、この設定でプロジェクトを分岐することは、プロジェクトの外部をピン止めするだけでは不十分なため、ネックの本当の苦痛です。あなたが外部を経由して、今度は、外部を経由して、XXを投影する参照Xを、プロジェクトを指し、分岐プロジェクトfoofoo'に、する必要がある場合は、必ず、あなたはfoo'ブランチの外部であるXXfoo'枝が必要になりますXであり、それはfoo'の外部である。 fooには半ダースの外見があり、その半分は独自の外観を持ち、さらには3つ以上のレイヤーを再現しています。プロジェクトXXXには分からないプロジェクト用に作成されたブランチがあります。

当社のソリューションは、再帰的にどちらかA)foo/branches/externals/foo'/XXを参照foo/branches/externals/foo'/X自体に(<project>/branches/foo'で参照されます彼らはfoo/branches/externals/foo'/Xにセットアップ外部Xの分岐)またはBと呼ばものの支店を持つすべての外観を交換することです) 。しかし、foo'を作成するときにこれを設定することは、非常に複雑であり、愚かな間違いを犯す可能性は十分にあるので、スクリプトを使用してプロジェクトとその外部を再帰的に降りて、すべて行います。

1

アプリ内では、1つのレポだけを外部に表示する必要があります。私はこれがあなたの共通リポジトリの "プロダクション"ブランチであると仮定します。基本的には、外部を独自の開発ライフサイクルを持つ別のプロジェクトとして扱います。

関連する問題