Автоматическое отключение Windows 7 от индексации метаданных .svn

26

Существует известная проблема с SVN-репозиториями и службой индексации окон, борющимися за файлы метаданных .svn. Здесь для более подробной информации.

Как мы можем настроить его таким образом, чтобы автоматически не возникало проблем с индексированием хранилищ Subversion в Windows (Vista / Win7). (Мы не хотим делать что-то вручную каждый раз, когда добавляем каталог репо.)

Одна идея состоит в том, чтобы настроить Windows, чтобы автоматически не индексировать папки с именем «.svn», однако я не могу найти способ сделать это.

Я знаю, что вы можете отключить определенные расширения, но это не работает, так как файлы метаданных svn находятся в папке.

Обратите внимание

Джеймс Ван Бокстел
источник
Репозитории SVN не содержат файлов .svn, а рабочие копии SVN. Вероятно, речь идет о проблемах с копированием
Сандер Рийкен,

Ответы:

11

У меня была такая же проблема, и я нашел решение. Весь мой код хранится в одной папке:

F: \ Projects \

В этой папке находятся деревья кода и связанные файлы проекта, которые занимают более 2 ГБ. Мне постоянно нужно искать в этом дереве и окнах. Индексирование на самом деле было чрезвычайно полезным инструментом для быстрого поиска, поэтому отключить его было невозможно. Я хочу исключить папки SVN, потому что они загромождают мои результаты поиска, (2) ненужное перетаскивание в моей системе, (3) SVN, Win7 и MS Security Essentials, кажется, не работают хорошо при выполнении больших операций SVN.

Прежде чем попробовать решение, воспроизведите проблему:

  1. В проводнике Windows перейдите к индексируемому корневому каталогу проекта (F: \ projects \ на моем компьютере).
  2. Используя строку поиска в правом верхнем углу окна проводника, выполните поиск по запросу «svn» (без кавычек).
  3. Вы должны увидеть триллион бесполезных SVN-файлов и папок, таких как ".svn" и "svn-base", отображаемых в результатах.

Решение:

  1. Посетите http://code.msdn.microsoft.com/windowssearch/
  2. Скачать CrawlScopeCommandLine.zip
  3. Распакуйте в какое-нибудь место на вашем компьютере и скомпилируйте проект
  4. Откройте окно консоли с правами администратора (Ctrl + Shift + щелчок левой кнопкой мыши на элементе «Командная строка» в меню «Пуск»).
  5. Перейдите туда, куда вы скомпилировали вышеуказанный проект.
  6. Запустите csmcmd.exe с параметром / add_rule (сначала используйте синтаксис /?).
  7. В моем случае я ввел следующую команду: csmcmd.exe /add_rule file:///F:\projects\*\.svn\* /USER /EXCLUDE

Я понял это, сначала запустив команду:, csmcmd.exe /enumerate_rulesчтобы перечислить все существующие. Уже было несколько правил использования подстановочного знака asterix (*) в Windows, так что это было доказательством того, что это возможно.

Теперь повторите шаги, чтобы воспроизвести проблему, и вы больше не должны видеть беспорядок SVN в ваших результатах поиска. Дайте компьютеру время для обновления индексов - это заняло менее 5 минут в моей системе. Иногда перезапуск службы поиска, запуск перестройки / переиндексации или перезагрузка помогают двигаться дальше.

Обновление : некоторые из моих проектов SVN используют ".svn", а некоторые используют "_svn", поэтому я добавил эти два правила для каждого диска:

csmcmd.exe /add_rule file:///F:\*\.svn\* /DEFAULT /EXCLUDE csmcmd.exe /add_rule file:///F:\*\_svn\* /DEFAULT /EXCLUDE

Жискар Бьямби
источник
Любое обновление об эффективности этого?
Джонатан Дэй
Работает для меня! Хорошее объяснение, Жискар!
Кристофер Оезбек
Я использовал этот метод в течение года, и он работал безупречно для меня.
Жискар Бьямби
1
Ссылка не работает, но это пример приложения, включенного в MS SDK, а также доступного отдельно. Источник здесь: msdn.microsoft.com/en-us/library/windows/desktop/… - не уверен, что Microsoft все еще размещает двоичный файл. Я использовал `. \ Csmcmd / add_rule" file: /// c: * \ .git * "/ DEFAULT / EXCLUDE`, чтобы исключить мои репозитории git.
Райан Павлик
5

AFAIK, служба индексирования Windows в Windows 7 по умолчанию выглядит только в папке «Пользователи» (поправьте меня, если я ошибаюсь). Если у вас есть SVN-репозитории в вашей личной папке, вы можете:

а) Размещение ваших репозиториев SVN в другом месте

б) Исключив эти папки из индекса. Здесь вы найдете, как исключить папку.

LaughingMan
источник
7
Я хочу, чтобы мои репозитории были проиндексированы, но не файлы метаданных svn.
Джеймс Ван Бокстел
4

Очевидным решением будет изменение Subversion для установки этого флага «не индексировать» всякий раз, когда он создает каталог .svn. Проблема в том, что эта функция больше не будет нужна, когда она будет представлена.

Известная проблема, скорее всего, исчезнет в разрабатываемых в настоящее время версиях Subversion (версия 1.7). В каталоге .svn будет намного меньше файловых операций, а также на 1 каталог .svn на рабочую копию.

Это снижает вероятность возникновения проблемы, а также значительно упрощает отключение индексирования, поскольку существует только одна папка .svn.

Сандер Рийкен
источник
2

Метод грубой силы

  1. сделать поиск по всему каталогу .svn
  2. выбрать все (ctrl + a)
  3. свойства щелчка правой кнопкой мыши
  4. нажмите «продвинуть ...»
  5. снимите флажок «Индексировать эту папку для быстрого поиска»
  6. применить изменения

Групповая политика WDS имеет опцию для Prevent Indexing Certain Paths, но она не указана в списке доступных для Windows Vista в соответствии с функциональной схемой.

Поддерживается: Windows XP, Windows Server 2003 с Windows Search 3.01 или любой версией Microsoft Windows с Windows Search 4.0 или более поздней версии.

Даррен Холл
источник
1
Я знал об этом обходном пути, однако он не является автоматическим. Цель состоит в том, чтобы новые папки, которые создаются автоматически, имели такое поведение.
Джеймс Ван Бокстел
1

Если ответ Даррена Холла - это подход "грубой силы", то мой ответ должен быть подходом "грубой силы и невежества". :)

Это то, что меня недавно раздражало, так как мы используем 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. Я не знаю, нужно ли перестраивать индекс, чтобы учесть файлы, которые теперь помечены как не проиндексированные делаю это, но мне все равно нужно перестроить мой, так что я так и делаю, так как индекс перестраивается только через несколько дней.

Чтобы сделать это "автоматическим", вы можете добавить пакетный файл в качестве перехвата после обновления, который запускается после обновления ... если он грязный, но он может работать.

Мокубай
источник
1

По сути, вы можете указать Windows Search игнорировать папки .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, выберите другое число).

Grynn
источник
Я заметил, что DefaultRules содержит слово ItemCount. Не уверен, что это необходимо, но я увеличил это значение, чтобы учесть дополнительное правило.
gapple