10

外部 (svn:externals プロパティ) を含む SVN リポジトリをチェックアウトしています。

しかし、明らかに、'infinity' 以外の値で --depth を使用すると、外部はダウンロードされません。--set-depth exclude を使用して後で更新し、後でフォルダーを除外できるように見えるため、これは特に皮肉なことです。

選択的にチェックアウトしてすべての外観を含めることは可能ですか?

4

5 に答える 5

6

私は同じ問題を抱えており、後で外部を手動でチェックアウトする回避策を除いて、本当の答えはありません。

mkdir wc
svn co http://example.com/svn/repo/trunk wc --depth=immediates
cd wc
svn co http://example.com/svn/extrepo external --depth=empty

しかし、明らかに、これは外部の目的全体を無効にします。

この動作は、Subversion イシュー トラッカーでIssue 3311として報告され、そこで指摘されました。

これは明示的に定義された機能でした。(この条件をチェックし、明示的に処理をスキップするコードがあります)

(ただし、問題は解決されておらず、ステータスは NEWのままです。)

そして、この「機能」の明確な理由を見つけることができませんでした。古いオプションのチェックを のチェックと交換することによってそれを導入したコミットのみを見つけました。これは少し厳しすぎると思いますが、それ以来、本質的にそこにとどまりました。--non-recursivedepth == svn_depth_infinity

于 2013-09-26T09:41:19.517 に答える
0

回避策として、cmd/bat Windows シェル スクリプトを少し使用して、外部定義を読み取り、不足しているチェックアウトを作成しました。外部のURLをハードコーディングするのではなく読み取ることを除いて、@ Mormegilの回答に少し似ています。

cd folderWithExternal

rem Read line from svn:external and put it in temporary file
svn propget svn:externals  | findstr myExternalName > external.tmp

rem Put content of temporary file in variable
set /p external=<external.tmp

rem Create a checkout for the external. The ^^ is to deal with cmd escaping.
svn checkout ^^%external%

この例では、外部定義が svn:externals プロパティで次の形式で指定されていることを前提としています。

^/elsewhere/foo@123 myExternalName

Windows cmd のエスケープ文字である^^という事実を回避するために、スクリプトにそれらを追加する必要がありました。^SVN の外部では、「同じリポジトリのルート」を意味します。

私のユースケースでは、特定の外部をチェックアウトする必要がありましたが、他の外部をチェックアウトする必要はありませんでした。そのため、特定の外部を探します。もちろん、代わりに外部のすべての行をループして、それらすべてに対してまばらなチェックアウトを作成することもできます。

于 2016-10-20T21:36:58.543 に答える
-1

例: svn co --depth immediates 想定: ルート ディレクトリ内のすべてのファイルが作成され、ルート ディレクトリ内の各ディレクトリに対して、空のディレクトリが作成されます。実際: ルート ディレクトリ内のすべてのファイルが作成され、ルート ディレクトリ内の externals を除く各ディレクトリに対して、空のディレクトリが作成されます。

私はあなたの問題を理解していると思いますが、これがどのように問題なのかわかりません. svn co --depthandの目的は、svn update --set-depthスパース チェックアウトを実行できるようにすることです。これにより、本当に興味のないギガバイトのファイルをチェックアウトすることなく、リポジトリ構造を操作できます。

スパース チェックアウトの使用例を 2 つ示します。

  • CM として、私はほぼすべてのプロジェクトで一度にまたは別の仕事をしています。私のシステムでは、svn co --depth=immediates $REPO/trunkトランクの下にあるすべてのプロジェクトを表示できるようにしましたが、ディスク容量をあまり使用せず、チェックアウトにそれほど時間はかかりませんでした。次に、注意が必要なプロジェクトに移動し、そのプロジェクトsvn up --set-depth=infinityを取得するために a を実行できます。このようにリポジトリ全体をチェックアウトすると、プロジェクトを操作できます (名前の変更、古いプロジェクトの削除など)。

  • 私の最後の仕事では、CVS から SVN への変換後にブランチとタグをリファクタリングしました。まったく意味のない数千のブランチとタグが作成されました。私は、svn co --set-depth=empty $REPO`svn up --set-depth=immediates ブランチ タグを実行しました。これで、すべてのタグとブランチのディレクトリができましたが、その下にあるファイルはありませんでした。古いブランチとタグを削除して、より意味のある名前に変更できました。

あなたが不満を言っているのは、私が を実行すると、空の外部ディレクトリsvn checkout --depth=immediatesが得られないということです。しかし、そのディレクトリは実際にはプロジェクトに存在しません。これは、Subversion によって実行される単純な手品です。空の外部ディレクトリを使用するとどうなりますか?

CM として、私はまばらなチェックアウトを行う数少ない人物の 1 人です。これは、ほとんどの開発者が通常行うことではありません。まばらなチェックアウトを行うとき、外部ディレクトリを見たくありません。なんらかの理由で、externals ディレクトリが存在する場所を知る必要がある場合はsvn plist -vR svn:externals .、完全なリストを取得してから、svn up --set-depth=infinity $extern_dir.

于 2013-04-09T14:40:29.350 に答える