Help us learn about your current experience with the documentation. Take the survey.
精确代码搜索
- Tier: Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed
- Status: Beta
此功能处于 beta 阶段,可能会在未通知的情况下更改。 有关更多信息,请参见 epic 9404。 要对此功能提供反馈,请在 issue 420920 上发表评论。
通过精确代码搜索,您可以使用精确匹配和正则表达式模式 在整个 GitLab 中或特定项目中搜索代码。
精确代码搜索由 Zoekt 提供支持, 并在启用该功能的组中默认使用。
使用精确代码搜索
先决条件:
- 必须启用精确代码搜索:
- 对于 GitLab.com, 精确代码搜索在付费订阅中默认启用。
- 对于 GitLab Self-Managed,管理员必须 安装 Zoekt 并 启用精确代码搜索。
要使用精确代码搜索:
- 在左侧边栏,选择 搜索或跳转。
- 在搜索框中输入您的搜索词。
- 在左侧边栏,选择 代码。
您也可以在项目或组中使用精确代码搜索。
可用范围
范围描述您正在搜索的数据类型。 精确代码搜索提供以下范围:
| 范围 | 全局 1 2 | 组 | 项目 |
|---|---|---|---|
| 代码 | 否 | 是 | 是 |
脚注:
- 管理员可以 禁用全局搜索范围。
在 GitLab Self-Managed 上,管理员可以使用
zoekt_cross_namespace_search功能标志启用全局搜索。 - 在 GitLab.com 上,未启用全局搜索。
Zoekt 搜索 API
此功能的可用性由功能标志控制。 有关更多信息,请参见历史记录。 此功能可用于测试,但尚未准备好用于生产环境。
使用 Zoekt 搜索 API,您可以使用 搜索 API 进行精确代码搜索。 如果您想使用 高级搜索 或基本搜索,请参见 指定搜索类型。
默认情况下,在 GitLab.com 上禁用 Zoekt 搜索 API 以避免破坏性更改。 要请求访问此功能,请联系 GitLab。
全局代码搜索
此功能的可用性由功能标志控制。 有关更多信息,请参见历史记录。 此功能可用于测试,但尚未准备好用于生产环境。
使用此功能在整个 GitLab 实例中搜索代码。
在大型 GitLab 实例上,全局代码搜索性能不佳。 当为超过 20,000 个项目的实例启用此功能时,您的搜索可能会超时。
搜索模式
GitLab 有两种搜索模式:
- 精确匹配模式:返回与查询完全匹配的结果。
- 正则表达式模式:支持正则和布尔表达式。
默认使用精确匹配模式。 要切换到正则表达式模式,在搜索框右侧, 选择 使用正则表达式 ( )。
语法
此表显示了精确匹配和正则表达式模式的一些示例查询。
| 查询 | 精确匹配模式 | 正则表达式模式 |
|---|---|---|
"foo" |
"foo" |
foo |
foo file:^doc/ |
foo 在以 /doc 开头的目录中 |
foo 在以 /doc 开头的目录中 |
"class foo" |
"class foo" |
class foo |
class foo |
class foo |
class 和 foo |
foo or bar |
foo or bar |
foo 或 bar |
class Foo |
class Foo(区分大小写) |
class(不区分大小写)和 Foo(区分大小写) |
class Foo case:yes |
class Foo(区分大小写) |
class 和 Foo(都区分大小写) |
foo -bar |
foo -bar |
foo 但不是 bar |
foo file:js |
foo 在文件名包含 js 的文件中 |
foo 在文件名包含 js 的文件中 |
foo -file:test |
foo 在文件名不包含 test 的文件中 |
foo 在文件名不包含 test 的文件中 |
foo lang:ruby |
foo 在 Ruby 源代码中 |
foo 在 Ruby 源代码中 |
foo file:\.js$ |
foo 在文件名以 .js 结尾的文件中 |
foo 在文件名以 .js 结尾的文件中 |
foo.*bar |
foo.*bar(字面意思) |
foo.*bar(正则表达式) |
sym:foo |
foo 在类、方法和变量名等符号中 |
foo 在类、方法和变量名等符号中 |
已知问题
- 您只能搜索小于 1 MB 且少于
20_000个三元组的文件。 有关更多信息,请参见 issue 455073。 - 您只能在项目的默认分支上使用精确代码搜索。 有关更多信息,请参见 issue 403307。
- 单行上的多个匹配项计为一个结果。 有关更多信息,请参见 issue 514526。
- 如果遇到换行符显示不正确的结果,
您必须将
gitlab-zoekt更新到 1.5.0 或更高版本。 有关更多信息,请参见 issue 516937。