1

Subversion を使用したベンダー ブランチについて調べています。私は subversion コマンド ラインにあまり慣れていません。Windows 7 ボックスで TortoiseSVN と Subclipse を SVN クライアントとして使用しています。

Subversion のベンダー ブランチのドキュメントでは、「外部リポジトリ コピー」の実行について説明していますが、TortoiseSVN でこれを行う方法を見つけることができませんでした。TortoiseSVN でこれを行う方法をインターネットで検索したところ、svn:externals代わりに使用することを提案する記事を見つけました。ベンダー ブランチのドキュメントには、使用するようには記載されておらずsvn:externals、代わりに外部リポジトリのコピーを使用するように記載されています。

TortoiseSVN でそのようなコピーを行う方法を知っている人はいますか? それが不可能な場合svn:externals、同じ結果が得られますか?

編集:

これが私のワークフローです:

  1. という名前の新しいルート レベル フォルダーをリポジトリに作成しましたvendor。これは の兄弟ですtrunk
  2. myrepo/vendor新しい作業コピーにチェックアウトしました。
  3. two different treesTortoiseSVN から へのマージをmyvendorrepo/trunk試みましたmyrepo/vendormyvendorrepo/trunkこれにより、 が と同じリポジトリにある必要があることを示すエラーが返されましたmyrepo/vendor

ベンダー ブランチのドキュメントでは特に a について説明foreign repository copyしていますが、TortoiseSVN では可能ではないようです。

4

1 に答える 1

2
  1. 「外部リポジトリのコピー」は、TortoiseSVN (または他のSVN クライアント、それは /part of/)リポジトリ管理のタスクです) では実行できません。また、SVN クライアントがアップストリーム コードに到達できない場合にのみ使用できます (まったくバージョン管理されておらず、SVN クライアントが理解できない SCM に格納されています)。
  2. 「2-URL マージ」を誤解して誤用しました (読み取りsvn help merge) - このタイプのマージはベンダー ブランチでは使用されず、別の方法で別の目的で使用されます: URL1 + URL2 からの独立した並列変更の URL3 の WC にsvn merge URL1 URL2マージされます

サンプルでの「外部コピー」と外部ベンダーの分岐

想像してみましょう:

  • 配置された外部コードVENDOR/PATH/TO/LIBRARY
  • アップストリーム コードのコピー- で(追加の中間 / VENDORSMY/VENDORS/VENDOR/LIBRARYノードは、複数のベンダーが登場する可能性がある将来のワークピースです)
  • ローカル作業はMY/trunk

「外国のコピー」スタイル

  • リポジトリ ファイルシステムにアクセスできる SVN-admin に依頼し、フルVENDORリポジトリのダンプを作成し、ノードsvnadmin dumpのみをフィルタリングした後、ダンプを送信します。/PATH/TO/LIBRARYsvndumpfilter
    • 別の方法は を使用svnrdump URLすることです。これにはいくつかの利点があります。読み取りアクセス権がある任意のリモート リポジトリをダンプでき、リポジトリの一部のみをダンプできます (そして svndumpfilter の頭痛の種を解消します) -svnrdump dump VENDOR/PATH/TO/LIBRARY > dumpfile
  • 準備された (何らかの方法で) ダンプをMYリポジトリにロードする必要があります:svnadmin load /PATH/TO/MY < dumpfileいくつかの追加:
    • 別のリポジトリからのダンプであるため、--ignore-uuidオプション ( not-empty の場合MY) は不要ですが、安全のために使用することができます
    • /PATH/TO/LIBRARYディレクトリのマウントポイントを からに変更したいので、/VENDORS/VENDOR/LIBRARY追加オプション--parent-dir /VENDORS/VENDOR/必須です(TBT!!! 私はメモリから親スペックを書きます)

これらの操作の後、ローカル リポジトリにノードが作成されます。これは、リモート ノードの正確なコピーですが、リモートにはまったく関係ありません。リモートの変更を監視し、手動でコピーと同期する必要があります (svn up VENDOR/PATH/TO/LIBRARY別の WC で、変更を にコピーします)。あなたのWC、変更をコミットします)

外観スタイル

  • リポジトリに物理ノード/VENDORS/VENDOR/を作成 ( )MYsvn mkdir --parents /VENDORS/VENDOR
  • /VENDORS/VENDOR/ の LIBRARY サブディレクトリを外部として定義します (必要に応じて、URL に PEG リビジョンがある場合とない場合があります。ない場合は、更新 /ゼロ操作/ を維持するのが簡単になりますが、古い履歴状態を復元するのは /不可能/ です。リポジトリ、PEG を使用すると、手動でリンクの現実性を維持する必要があります /必要に応じて PEG リビジョンを編集します/が、履歴は常に正しく自動的に保存されます)、VENDOR/PATH/TO/LIBRARY にマッピングされます

どちらのスタイルでも、コードへのアップストリームの統合は定期的に /VENDORS/VENDOR/LIBRARY をトランクにマージするだけです

PS : externals-syle の場合、最初にトランクに初期スナップショットを作成し (空のトランクの場合)、最初にトランクにマージするのは面倒でわかりにくいかもしれません。私の知る限り、 /VENDORS/VENDOR/LIBRARY を空のトランクにマージすることはできsvn copyません(また):(テキストを思い出せない)エラーが発生し、マージ|コピーはまったくありません。The Right Way を参照することはできませんが、ワーキング コピーのファイルをベンダー ブランチからトランクにコピーし、トランクをコミットして BASE を取得します。この場合、LIBRARY の最初のマージ (および最初のみ) をトランクにマージして、関係のないものをマージします。 (Subversion の場合) ノード追加--ignore-ancestryオプション: 後でトランクと LIBRARYは既に関連付けられています

于 2014-02-11T07:25:30.957 に答える