自动从索引.svn元数据禁用Windows 7


26

SVN存储库和Windows索引服务在争夺.svn元数据文件方面存在一个已知问题。此处了解更多详情。

我们如何进行设置,以使使用Windows(Vista / Win7)索引的Subversion存储库不会自动出现问题。(我们不想每次添加repo目录时都必须手动执行操作。)

一个想法是将Windows设置为不自动对名为“ .svn”的文件夹进行索引,但是我找不到解决方法。

我知道您可以禁用某些扩展名,但这似乎不起作用,因为svn元数据文件位于文件夹中。

注意:


SVN存储库不包含.svn文件,SVN工作副本包含。这可能与工作副本问题有关
Sander Rijken 2009年

Answers:


11

我遇到了同样的问题,找到了解决方案。我所有的代码都存储在一个文件夹中:

F:\ projects \

在该文件夹下是总计超过2GB的代码树和相关项目文件。我一直需要搜索这棵树和Windows,实际上索引实际上是进行快速搜索的非常有用的工具,因此不能选择禁用它。我想排除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. 使用/ add_rule参数执行csmcmd.exe(语法首先使用/?)。
  7. 就我而言,我输入了以下命令: csmcmd.exe /add_rule file:///F:\projects\*\.svn\* /USER /EXCLUDE

我首先运行命令:csmcmd.exe /enumerate_rules,列出了所有现有命令,从而弄清楚了这一点 。Windows已经有了使用asterix(*)通配符的一些规则,因此证明了这是可能的。

现在,重复上述步骤以重现此问题,并且您应该再也不会在搜索结果中看到SVN混乱。给计算机一些时间来更新索引-在我的系统上花了不到5分钟的时间。有时,重新启动Search服务,启动重建/重新索引或重新启动可以帮助您顺利进行。

更新:我的某些SVN项目使用“ .svn”,而有些则使用“ _svn”,因此我已将这两个规则添加到每个驱动器中:

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


关于此功效的任何更新?
乔纳森·戴

为我工作!很好的解释,吉斯卡德!
Christopher Oezbek'9

我已经使用这种方法一年了,它对我来说已经完美地起作用了。
Giscard Biamby 2012年

1
链接已失效,但这是MS SDK附带的示例应用程序,并且可以单独使用。来源在这里:msdn.microsoft.com/en-us/library/windows/desktop/…-不知道Microsoft是否仍托管二进制文件。我用`。\ csmcmd / add_rule“ file:/// c:* \ .git *” / DEFAULT / EXCLUDE`来排除我的git仓库。
Ryan Pavlik

5

AFAIK,Windows 7上的Windows索引服务仅在Users文件夹中作为默认值显示(如果我输入错误,请纠正我)。如果您的个人文件夹中有SVN存储库,则可以:

a)将您的SVN存储库放在其他位置

b)通过从索引中排除那些文件夹。在这里,您将找到如何排除文件夹。


7
我想索引我的存储库,而不是svn元数据文件。
James Van Boxtel,

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 Search 3.01的Windows Server 2003或带有Windows Search 4.0或更高版本的任何版本的Microsoft Windows。


1
我知道此解决方法,但是它不是自动的。目标是使自动创建的新文件夹具有此行为。
James Van Boxtel,

1

如果Darren Halls的答案是“蛮力”方法,那么我的答案必须是“蛮力和无知”方法。:)

这是最近让我烦恼的事情,因为我们使用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 checkout目录中运行,而使用大型存储库则可能需要一些时间...

我目前正在使用最新的Service Pack在Vista下进行测试,我希望它可以在Windows 7上运行。我不知道是否需要重建索引以考虑到现在标记为未索引的文件这样做,但是无论如何我都需要重建我的,所以这就是我正在做的,因为索引重建只有几天的时间。

为了使该文件成为“自动”文件,您可以将批处理文件添加为更新后挂接的钩子,该钩子在更新后即可运行...虽然它很杂乱,但可能会起作用。


1

您可以通过调整注册表来告诉Windows搜索忽略.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,请选择另一个数字)。


我注意到DefaultRules包含一个ItemCount双字。不确定是否有必要,但是我增加了此值以说明其他规则。
gapple 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.