16

DOSバッチファイルの形式で自家製の自動ビルドスクリプトがあります。そのスクリプトの一部で、プロジェクトで使用されているサードパーティのものを含むSVNリポジトリのセクションを(「svncheckout」で)チェックアウトします。このバッチファイルは長い間非常にうまく機能していましたが、今では多くの綿毛(ドキュメント、サンプルコードなど)をサードパーティの領域にチェックインし、このスクリプトのチェックアウト部分の速度が大幅に低下しています。必要なものだけをチェックして、これを軽減したいと思います。この場合は、ほとんどがdllファイルです。だから、私の質問はこれです:ファイル拡張子でフィルタリングされたSVNリポジトリをチェックアウトするための最良の方法は何ですか?

私はsvnヘルプでこれを行うための明白な方法を見ませんでした。いくつかの方法でsvn.exeをラップする.NETユーティリティライブラリがあり、これを拡張して、関心のある拡張機能に一致するコンテンツのみを取得することを考えていました。しかし、存在する場合は、より簡単な方法または既存の方法を使用したいと思います。

4

6 に答える 6

34

これは可能です。svn checkout空のディレクトリを作成してから、必要なsvn update filenameファイルごとに作成できます

あなたのスクリプトは次のようなことができます:

  1. svn checkout svn://path/to/repos/directory --depth empty
  2. svn list --recursive svn://path/to/repos/directory
  3. 禁止されているファイル拡張子を削除するフィルターを通過した結果のパイプ。grep
  4. この新しいフィルタリングされたリストとsvn update --parents各ファイルを反復処理します

これにより、特定のファイルやファイル拡張子のない作業コピーの望ましい結果が得られます。

もちろん、あなたがおっしゃっている「綿毛だらけの人」という問題もありますが、それは別問題です。

于 2010-01-07T21:47:48.407 に答える
3

ここで説明したように、SVN 自体に組み込まれているオプションは 1 つだけです: sparse checkoutと呼ばれる SVN 1.5 の新機能ですが、ディレクトリ レベルでしかチェックアウトを選択できないため、必要のないファイルを別のディレクトリに並べ替える必要があります。 .

于 2008-10-10T20:00:16.393 に答える
0

Michael Hackner からの回答の powershell 固有の実装については、次のようなものを試してください。

svn ls http://svn-server/src --recursive | Out-File svn.txt
Get-Content .\svn.txt | where {$_.toLower().EndsWith('special.xml')} | select -First 200 | foreach {New-Object PSObject -Property @{ Path = $_; Munged = $_.Replace('/', '_') } } | foreach { svn export "http://svn-server/src/$($_.Path)" $($_.Munged) }

ここでの私の特定の使用例は、似たような名前のファイル (この場合は *special.xml) を見つけて、基本的に一意の名前を持つ単一のフォルダーにすべてをダンプすることです。中間ファイルを使用してレポ リスト全体を保存しましたが、これはすべてインライン化することもできます。

于 2015-10-07T01:20:41.077 に答える
0

特定のいくつかのファイルだけをチェックアウトすることはできません。フォルダー全体のみをチェックアウトできます。チェックアウトしているものの編成を再配置するか、別の場所から作業コピーをコピーして更新することができます。

于 2008-10-10T19:57:04.730 に答える
0

Michael Hackner が提示したアプローチを試してみました。以下は、DOS システムの実装です。このスクリプトを実行する前に、空のフォルダーをチェックアウトする必要があることに注意してください。

@echo off

svn list --recursive https://path_to_repository_folder | find /I ".sql" > filelist.txt

REM Specify a custom delim. Otherwise space in filename will be treated as a delimiter.
FOR /F "delims=|" %%i  IN (filelist.txt) DO (
    echo -------------
    echo %%i
    svn update --parents "%%i"
)
于 2017-04-21T01:12:02.427 に答える
-4

これを行うための最も簡単で正しい方法は次のとおりです。

チェックアウトする必要がある.dllファイルがあると思われるサードパーティのフォルダーにがらくたがある場合は、そのがらくたを別の場所に削除してください! とにかくここに属していません。

于 2008-10-10T20:15:11.637 に答える