SVNリポジトリとWindowsインデックスサービスが.svnメタデータファイルをめぐって争うという既知の問題があります。 詳細はこちら
Windows(Vista/Win7)によってインデックス付けされたSubversionリポジトリで問題が発生しないように自動的に設定するにはどうすればよいですか? (リポジトリディレクトリを追加するたびに手動で何かをする必要はありません。)
1つのアイデアは、「。svn」という名前のフォルダーに自動的にインデックスを付けないようにWindowsをセットアップすることですが、これを行う方法が見つかりません。
特定の拡張機能を無効にできることは知っていますが、svnメタデータファイルがフォルダーにあるため、機能しないようです。
注:
私は同じ問題を抱えていて、解決策を見つけました。私のコードはすべて1つのフォルダーに保存されます。
F:\ projects \
そのフォルダの下には、合計2GBを超えるコードと関連プロジェクトファイルのツリーがあります。私は常にこのツリーとウィンドウを検索する必要があります。インデックス作成は実際には高速検索を行うための非常に便利なツールであるため、オフにすることはできませんでした。 SVNフォルダーを除外したいのは、検索結果が乱雑になる、(2)システム上で不要なドラッグが発生する、(3)SVN、Win7、およびMS Security Essentialsが、大規模なSVN操作を実行するとうまく機能しないように見えるためです。
解決策を試す前に、問題を再現してください:
解決策:
csmcmd.exe /add_rule file:///F:\projects\*\.svn\* /USER /EXCLUDE
私は最初にコマンドを実行することによってこれを理解しました:csmcmd.exe /enumerate_rules
、既存のものをすべて一覧表示します。 Windowsでアステリックス(*)ワイルドカードが使用されているルールがすでにいくつかあったため、これが可能であることが証明されました。
ここで手順を繰り返して問題を再現すると、検索結果にSVNが乱雑に表示されなくなります。コンピューターにインデックスを更新する時間を与えます。これは私のシステムでは5分もかかりませんでした。検索サービスを再起動したり、再構築/インデックスの再作成を開始したり、再起動したりすると、問題が解決する場合があります。
Update:一部のSVNプロジェクトは「.svn」を使用し、一部は「_svn」を使用するため、すべてのドライブに次の2つのルールを追加しました。
csmcmd.exe /add_rule file:///F:\*\.svn\* /DEFAULT /EXCLUDE
csmcmd.exe /add_rule file:///F:\*\_svn\* /DEFAULT /EXCLUDE
AFAIK、Windows7のWindowsIndexingサービスは、デフォルトでユーザーフォルダー内のみを検索します(間違っている場合は修正してください)。個人用フォルダー内にSVNリポジトリーがある場合は、次のことができます。
a)SVNリポジトリを別の場所に配置する
b)それらのフォルダをインデックスから除外する。 ここ フォルダを除外する方法がわかります。
明らかな修正は、Subversionを変更して、.svnディレクトリを作成するたびにこの「インデックスを作成しない」フラグを設定することです。問題は、この機能が導入されたときに不要になることです。
既知の問題は、現在開発中のSubversionバージョン(バージョン1.7)で解消される可能性があります。 .svnディレクトリ内のファイル操作ははるかに少なくなり、作業コピーごとに1つの.svnディレクトリもあります。
これにより、問題が発生する可能性が低くなり、.svnフォルダーが1つしかないため、インデックス作成を無効にするのがはるかに簡単になります。
WDSグループポリシーPrevent Indexing Certain Paths
のオプションがありますが、機能チャートによると、WindowsVistaで使用できるようにリストされていません。
サポート対象:Windows XP、Windows Search3.01を搭載したWindowsServer 2003、またはWindows Search4.0以降を搭載した任意のバージョンのMicrosoftWindows。
ダレンホールの答えが「ブルートフォース」アプローチである場合、私の答えは「ブルートフォースアンドイグノランス」アプローチでなければなりません。 :)
これは、ドキュメントとプロジェクトの管理にSVNを使用しているため、最近私を悩ませています。つまり、Windowsインデクサーは、あいまいなドキュメントを検索できる場合に非常に便利ですが、すべてのsvnストレージファイルをキャッチすることはまったく役に立ちません。
これは、Windowsバッチファイルでの私の(かなり醜い)解決策です:
ATTRIB /S /D -H ".svn"
ATTRIB /S /D +I ".svn"
ATTRIB /S /D +I "all-wcprops"
ATTRIB /S /D +I "entries"
ATTRIB /S /D +I "tmp"
ATTRIB /S /D +I "props"
ATTRIB /S /D +I "text-base"
ATTRIB /S /D +I "prop-base"
ATTRIB /S /D +I "*.svn-base"
ATTRIB /S /D +H ".svn"
ATTRIBが+ Iスイッチを非表示のフォルダーに適用することを拒否したため、最初と最後の行があります。少なくとも私にとってはそうです。これを「svnNoIndex.bat」のようなファイルにコピーして、SVNチェックアウトディレクトリで実行する必要があります。大きなリポジトリでは時間がかかる場合があります...
私は現在、最新のサービスパックを使用してVistaでこれをテストしていますが、Windows 7でも機能すると思います。インデックスが作成されていないものとしてマークされているファイルを考慮して、インデックスを再構築する必要があるかどうかわかりません。これを行うが、とにかく私のものを再構築する必要があるので、インデックスが再構築されるのはほんの数日なので、それが私がしていることです。
これを「自動」にするために、更新後に実行される更新後のフックとしてバッチファイルを追加することができます...それが厄介であることを認めれば、それは機能するかもしれません。
レジストリを微調整することで、基本的にWindowsSearchに.svnフォルダーを無視するように指示できます。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Search\CrawlScopeManager\Windows\SystemIndex\DefaultRules\11]
"URL"="file:///*\\.svn\\*"
"Include"=dword:00000000
"Suppress"=dword:00000000
"Default"=dword:00000001
"Policy"=dword:00000000
URLは、ファイルシステム上の任意の場所にある「.svn」という名前のフォルダーと一致します。 (デフォルトルールの後の番号は一意である必要があります。つまり、デフォルトルール11が既にある場合は、別の番号を選択します)。