ファイル拡張子でフィルタリングされたSVNチェックアウト?

StackOverflow https://stackoverflow.com/questions/192810

  •  08-07-2019
  •  | 
  •  

質問

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

svnヘルプでこれを行う明確な方法が見つかりませんでした。 svn.exeを何らかの方法でラップする.NETユーティリティライブラリがあり、これを拡張して、目的の拡張機能に一致するコンテンツのみを取得することを考えていました。しかし、もっと簡単な方法または既存の方法があればそれを使用したいと思います。

役に立ちましたか?

解決

これは可能です。空のディレクトリを 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 各ファイル

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

もちろん、たくさんの毛羽立ちのない人の[チェック]について言及した問題もあります。しかし、それは別の問題です。

他のヒント

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

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

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

svn ls http://svn-server/src --recursive | Out-File svn.txt
Get-Content .\svn.txt | where {

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

<*>

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

.toLower().EndsWith('special.xml')} | select -First 200 | foreach {New-Object PSObject -Property @{ Path =

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

<*>

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

; Munged =

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

<*>

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

.Replace('/', '_') } } | foreach { svn export "http://svn-server/src/$(

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

<*>

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

.Path)" $(

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

<*>

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

.Munged) }

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

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"
)

これを行う最も簡単で正しい方法:やってはいけません!

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top