git 是否有办法忽略某些模式的Windows搜索索引?

tyg4sfes  于 2022-11-20  发布在  Git
关注(0)|答案(2)|浏览(171)

是否有办法忽略某些模式的Windows搜索索引?
例如,我想跳过以下文件夹:
C:\Git**.git\ C:\Git**\软件包\ C:\其他\git**.git\ C:\其他\git**\软件包
这会导致搜索结果中出现数千个额外的噪声匹配。
我确实想索引C:\misc\git中的各个文件夹,除了.git或.packages子文件夹中的内容。我只找到了一种静态的方法来实现这一点,没有任何基于模式的方法。看起来这是一个常见的用例,有点像git使用.gitignore来将某些内容排除在版本控制之外。在这种情况下,它会将这些内容排除在搜索索引之外。
我在“索引位置”中没有看到任何类似的模式工具。我假设可以通过运行某种脚本来完成,以便在每次内容更改时排除当前匹配(例如,添加了C:\misc\git\somethingnew),但这将与优雅相反。
任何帮助都将不胜感激。
便士

3bygqnnd

3bygqnnd1#

根据this answer由@PryrtCJ Windows注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Search\CrawlScopeManager\Windows\SystemIndex\WorkingSetRules\所包含的规则,其中允许使用通配符。

要添加这样的规则,我建议在索引选项中添加一个.git文件夹到排除的路径,然后找到合适的密钥(URL可能是file:///C:\[partition-or-disk-id]\path\to\.git\之类的)。然后编辑密钥权限(选择包含.git URL的密钥并右键单击它)--你需要将密钥所有者从SYSTEM更改为你的帐户,并允许Administrators组修改密钥。

如果您有权限修改它,请右键单击URL,选择修改并将其内容更改为file:///*\.git\。稍后恢复以前的权限(只是为了避免问题)。
这样,您可以创建任何 * 过滤器,例如file:///C:\misc\*\packages\*

r8uurelv

r8uurelv2#

可以通过编程方式管理Windows Search索引。
您可以使用以下模式从搜索索引中排除文件夹:

  • file:///C:\*\packages\与名为“packages”的文件夹及其内容匹配
  • file:///D:\*\obj\与名为“obj”的文件夹及其内容匹配

我在Windows 11 21h2下使用C#成功地测试了这些模式。
添加新规则的示例(Powershell)

# [wsearch-add-rule.ps1]
# Source: https://stackoverflow.com/questions/13390514/how-to-add-a-location-to-windows-7-8-search-index-using-batch-or-vbscript/13454571#13454571
Add-Type -path ".\Microsoft.Search.Interop.dll"
$sm = New-Object Microsoft.Search.Interop.CSearchManagerClass 
$cat = $sm.GetCatalog("SystemIndex")
$csm = $cat.GetCrawlScopeManager()
$csm.AddUserScopeRule("file:///D:\*\obj\", $true, $false, $null)
$csm.SaveAll()

列出现有规则的示例(Powershell)

# [wsearch-list-rules.ps1]
# Source: https://powertoe.wordpress.com/2010/05/17/powershell-tackles-windows-desktop-search/
Add-Type -path "Microsoft.Search.Interop.dll"
$sm = New-Object Microsoft.Search.Interop.CSearchManagerClass 
$cat = $sm.GetCatalog("SystemIndex")
$csm = $cat.GetCrawlScopeManager()
$scopes = @()
$begin = $true
[Microsoft.Search.Interop.CSearchScopeRule]$scope = $null
$enum = $csm.EnumerateScopeRules() 
while ($scope -ne $null -or $begin) {
     $enum.Next(1,[ref]$scope,[ref]$null)
     $begin = $false
     $scopes += $scope
}
$scopes|ogv

所需的Microsoft.Search.Interop.dll可以在in the old Windows Search 3x SDK on web archive中找到(必须将url复制并粘贴到新的选项卡中)
资源:

相关问题