6

私はSubversionにかなり慣れておらず、最近、を使用して他のリポジトリに属する​​ファイルを自動的にインポートする方法を学びましたsvn:externals。そして、トランクフォルダーをコミットし、プロジェクトのスナップショットを作成するタグを作成すると、外部として定義されたファイル/フォルダーがタグフォルダーに追加されません。

たとえば、私はこのフォルダ構造を持っています

Z:\ repos \ repoA

Z:\ repos \ repoB

Z:\ Projects \ workB

に設定svn:externalsZ:\Projects\workBfile:///Z:/repos/repoA/trunk/lib trunk/libので、repoAのlibフォルダが現在の作業ディレクトリに自動的に追加されますZ:\Projects\workB\trunk。実際に実行するSVN Updateと、トランクフォルダーの下にlibフォルダーが作成されます。

いくつかのファイルを編集して実行SVN Commit...した後、コンテキストメニューからZ:\Projects\workB\trunk選択しました。フィールドに「OK」と入力TortoiseSVN -> Branch/Tagして押します。1.0.1タグが正常に作成されました。To Pathtags/1.0.1

を実行SVN Updateした後Z:\Projects\workB\tags、1.0.1という名前のフォルダーが表示されましたが、外部ファイルはありませんでした。

これは正常ですか?インポートされたファイルも作業ディレクトリのトランクフォルダにあるので、そこにあると思いました。


誰でもこれをテストできるように、Assemblaに2つの公開リポジトリを作成しました。

lib2番目のリポジトリには、最初のリポジトリからフォルダをプルダウンする外部定義があります。2番目のリポジトリから現在のトランクファイルのタグを作成すると、外部ファイルがタグフォルダに追加されません。また、タグフォルダをチェックアウトすると、外部ファイルがローカルの作業コピーに追加されません。

4

2 に答える 2

4

externalsプロパティを設定すると、ファイルは外部リポジトリから作業リポジトリにコピーされません。むしろ、将来それらのファイルをどこからフェッチするかについての「メモ」を作成するだけです。

したがって、タグを作成するときに、svnは外部にリンクされている実際のファイルをコピーする必要はありません。代わりに、「メモ」をコピーするだけです。ディレクトリのチェックアウトtags/1.0.1(または、すでにローカルでチェックアウトされている場合は更新)を実行すると、これらのファイルが作業リポジトリに存在しない場合でも、関連する外部が正しくプルダウンされることに気付くでしょう。

編集:

ああ、私はついに問題を見ました。外部はトランクディレクトリではなくルートディレクトリに設定します。

svnを表示する最良の方法は、それが単なるファイルシステムであり、トランク、タグ、およびブランチの全体的なアイデアは単なる概念的なアイデアであり、各ディレクトリは次のディレクトリと同じです。

したがって、トランクをタグディレクトリにコピーしても、外部プロパティはトランクディレクトリの一部ではないため、転送されません(外部アイテムをトランクに配置するように指示されているだけです)。解決するには、ルートディレクトリから外部プロパティを削除し、それらをトランクに追加する必要があります。次にタグを作成するときに、外部プロパティを転送する必要があります。

次のコマンド:

svn propget svn:externals file:///Z:/Projects/workB/trunk

出力する必要があります:

file:///Z:/repos/repoA/trunk/lib lib 
于 2012-10-16T18:00:07.647 に答える
2

あなたの期待は正しいです。svn copyは、ソースオブジェクトの100%コピーを作成する必要があります。つまり、外部定義(およびコンテンツ)がタグに表示される必要があります

  1. 小切手svn ls -v -R file:///Z:/repos/repoB/tags/1.0.1
  2. チェックとトラブルシューティングを簡単にするために、公開されているリポジトリセットに移動することをお勧めします-テストのために、2つ以上のSVNリポジトリを使用してAssemblaの空き領域に作成できます

問題の注意とは関係ありません:タグは、慣例により、コードフリーズポイントとして使用されます(後で、まったく同じコードを取得できます)が、これは、すべての外部をタグ作成の状態にロックしている必要があることを意味します。repos / repoA / trunk / libはHEADリビジョンであり、時間の経過とともに変更され、タグ1.0.1の対応するリビジョン(リンクタグrev-lib rev)は失われます。PEGリビジョンについて読む

編集

トランクに拡張機能を備えたAssemblaリポジトリをテストしました。テストに失敗しました:

>svn co https://subversion.assembla.com/svn/subversion-troubleshoot-b/trunk .
A    core_mod.txt
Checked out revision 4

ただ、/libフォルダもチェックアウトする必要がありました

Edit2

subversion-troubleshoot-bリポジトリの場合:定義に修正が適用され、PEGリビジョンに外部バインドされた正しく記述されたタグ( 1.0.1 )が作成されました

トランクとタグのチェックアウトの違いを見る

z:\>svn co https://subversion.assembla.com/svn/subversion-troubleshoot-b/
...

Fetching external item into 'subversion-troubleshoot-b\trunk\lib':
A    subversion-troubleshoot-b\trunk\lib\lib01.txt
Checked out external at revision 4.

Fetching external item into 'subversion-troubleshoot-b\tags\1.0.1\lib':
A    subversion-troubleshoot-b\tags\1.0.1\lib\lib01.txt
Checked out external at revision 2.

Checked out revision 7.

リンクされたリポジトリでlibを後で変更する場合、トランクはフォルダーの最新コンテンツを取得します。1.0.1は常にsubversionのlibのリビジョン2になります-トラブルシューティング

于 2012-10-16T16:13:54.407 に答える