SVN 存储库和 Windows 索引服务存在争夺 .svn 元数据文件的已知问题。点击此处了解更多详细信息。
我们如何才能设置它,以便自动地通过 Windows(Vista/Win7)索引 Subversion 存储库没有问题。(我们不想每次添加 repo 目录时都必须手动执行某些操作。)
一个想法是设置 Windows 自动不索引名为“.svn”的文件夹,但是我找不到这样做的方法。
我知道您可以禁用某些扩展,但这似乎不起作用,因为 svn 元数据文件位于文件夹中。
注意:
答案1
我遇到了同样的问题并找到了解决方案。我的所有代码都存储在一个文件夹中:
F:\项目\
该文件夹下是代码树和相关项目文件,总计超过 2GB。我经常需要搜索这棵树,而 Windows 索引实际上是进行快速搜索的极其有用的工具,因此关闭它不是一个选择。我想排除 SVN 文件夹,因为它们会使我的搜索结果变得混乱,(2) 对我的系统造成不必要的拖累,(3) SVN、Win7 和 MS Security Essentials 在执行大型 SVN 操作时似乎无法正常工作。
在尝试解决方案之前,请重现该问题:
- 在 Windows 资源管理器中,导航到您的索引项目根目录(在我的计算机上为 F:\projects\)。
- 使用资源管理器窗口右上角的搜索栏,搜索“svn”(不带引号)
- 您应该会看到结果中出现了数万亿个无用的 SVN 文件和文件夹,例如“.svn”和“svn-base”。
解决方案:
- 访问http://code.msdn.microsoft.com/windowssearch/
- 下载 CrawlScopeCommandLine.zip
- 解压到你机器上的某个位置,然后编译项目
- 打开具有管理权限的控制台窗口(Ctrl+Shift+左键单击开始菜单中的“命令提示符”项)。
- 导航到您编译上述项目的位置。
- 使用 /add_rule 参数执行 csmcmd.exe(首先使用 /? 作为语法)。
- 就我而言,我输入了以下命令:
csmcmd.exe /add_rule file:///F:\projects\*\.svn\* /USER /EXCLUDE
我首先通过运行命令来解决这个问题: csmcmd.exe /enumerate_rules
,列出所有现有的。Windows 已经使用了一些带有星号 (*) 通配符的规则,因此这证明这是可能的。
现在重复上述步骤来重现问题,您应该不会再在搜索结果中看到 SVN 混乱。给计算机一些时间来更新索引——这在我的系统上花费了不到 5 分钟。有时重新启动搜索服务、启动重建/重新索引或重新启动有助于解决问题。
更新:我的一些 SVN 项目使用“.svn”,一些使用“_svn”,因此我为每个驱动器添加了这两条规则:
csmcmd.exe /add_rule file:///F:\*\.svn\* /DEFAULT /EXCLUDE
csmcmd.exe /add_rule file:///F:\*\_svn\* /DEFAULT /EXCLUDE
答案2
据我所知,Windows 7 上的 Windows 索引服务默认仅在用户文件夹中查找(如果我错了,请纠正我)。如果您的个人文件夹中有 SVN 存储库,您可以:
a) 将你的 SVN 存储库放在其他地方
b) 从索引中排除这些文件夹。这里您将找到如何排除文件夹。
答案3
显而易见的解决方法是更改 Subversion,使其在创建 .svn 目录时设置此“不索引”标志。问题是,一旦引入此功能,将不再需要它。
这个已知问题很可能会在目前正在开发的 Subversion 版本(1.7 版)中消失。.svn 目录中的文件操作将大大减少,并且每个工作副本仅需 1 个 .svn 目录。
这使得问题发生的可能性较小,并且也使得禁用索引变得更加容易,因为只有一个.svn文件夹。
答案4
如果 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 签出目录中运行它,对于大型存储库,这可能需要一些时间……
我目前正在使用最新的服务包在 Vista 下测试它,我希望它能在 Windows 7 上运行。我不知道是否需要重建索引来考虑现在被标记为未索引的文件,但无论如何我都需要重建我的索引,所以我正在这样做,因为索引重建只需要几天时间。
为了使其“自动”,您可以将批处理文件添加为更新后运行的更新后挂钩......虽然这很混乱,但它可能会起作用。