私のSWグループは、私たちの姉妹サイトがすでにそれを使用しているため、私たちのソース管理システムをMicrosoftがサポートしていないVisual Source SafeからSubversionにアップデートしようとしています。 VSSでは内部リンクで直接行うことができる共有コードが多数あります。複数のプロジェクトを使用するには、これらを共有フォルダに移動する必要があります。外部を使用してこれらを導入することは可能ですが、SVNアーキテクチャーにはややリスクがあります(ただしサードパーティーのコードや変更されないものにも使用する予定です)。とにかく私はどこにも書かれていない解決策を考案しましたが、私たちは皆考えていましたので、他の人が何を考えているのか、落とし穴があるのか見てみました。Subversion - 外部のない一般的なフォルダを共有する
私は外部とは対照的に、この "共有内部"フォルダと呼んでいます。ある言語(この場合はC++)の汎用ライブラリファイルを含むリポジトリルートにCommon_Codeというディレクトリがあるとします。今私はトランク/ブランチ/タグでMyProjectを作成し、私のプロジェクトのサブディレクトリに共有フォルダを入れたいと思います。ですから、Common_CodeからMyProject/trunk/Common_Codeに分岐する通常のSubversionブランチを作成します。 さまざまなチームメンバーがトランクから分岐することで、MyProjectで作業します。 BobのブランチはMyProject/branches/Bob_Workingのようになり、サブフォルダはMyProject/branches/Bob_Working/Common_Codeに分岐します。これは実質的に共有フォルダのブランチのブランチです。
ボブが完成すると、彼はトランクに再びマージします。これは、ルート共有フォルダから「内部ブランチ」を作成した可能性のある他のプロジェクトに干渉することなく継続されます。最終的には製品をリリースしますが、他のプロジェクトに役立つCommon_Codeにいくつかの一般的な変更を加えたことがわかります。したがって、グループのレビューの後、プロジェクトのCommon_Codeバージョンを最初に取得したルートバージョンにマージすることに同意します。これにより、リリースの共有コードを更新する必要がなくなり、変更を他の会社と共有する必要がなくなります。
これはコードをネイティブに共有するシンプルで柔軟な方法のようです。私は2つの可能性のある制限を見る。第一に、リポジトリ間では機能しません。その場合は、外部を使用する必要があります。第二に、マージ後の最初のブランチを削除することはできないので、-reintegrateを使うとは思いません。通常のマージバックが受け入れられるのか、私たちのTortoiseクライアントがサポートしているのかまだ分かりません。
ホイールを改造しないでください! SVN外観は**共有方法の**自然な道(TM)**であり、**彼らはSVNアーキテクチャ**に自然に統合されています**。あなたの "ワークフロー"では、コピーのコピーのコピーを元の場所に戻して、変更をマージすることで多くの頭痛を被ります。外部のPEGリビジョンについてもっと読む(そしてPEG化されていないことを忘れている)と共通しているのは –
プロジェクト間で共有されなくなるまで、このスキームで共有される内部構造の不可避な相違はほとんどありません、避けたいものは?それとも大丈夫ですか? – Ben
私たちの姉妹サイトでは、釘付けされた外見を使用しています。しかし、彼らには非常に複雑な更新方法があります。変更を加えるには、それらを共通に分岐し、外部を分岐のヘッドリビジョンにポイントする必要があります。完了したら、ブランチを共通のトランクにマージし、新しいトランクバージョンに外部を再ペグします。上記の同じことをするより複雑なバージョンのようです。プロジェクトに変更を加えるつもりがない場合でも、プロジェクトが外部から共有コードを参照できるようにしています。しかし、そうした場合、この方法は簡単な方法に見えます。 –