[安利] 代码搜索工具 Sourcegraph 使用及部署

  • 在浏览了解 github1s 项目时,发现赞助商中有个 Sourcegraph 的名字,好奇心驱动下点击查看了下,Wow!由此发现了个很实用的工具

Sourcegraph

是什么?

来看维基百科和官网的介绍

跨越存储库 、支持任何规模 、代码搜索......

有点意思,但是仍然懵懵懂懂。实际体验功能感受下

功能使用

项目代码查看

在浏览github项目的时候,如果是仅在页面查看时,项目文件目录结构的预览和跳转不像IDE上那般友好。 Sourcegraph 提供了解决方案:

浏览器插件

官方提供了浏览器插件扩展形式支持使用

插件使用简要说明:

java 复制代码
chrome-extension://dgjhfomjieaadpoljlnidmbgkdffpack/after_install.html

插件下载完成之后,打开github,以 fastjson 项目为例,首页及单个文件详情页会出现一个Sourcegraph图标。

单击图标后就会进入到 Sourcegraph 代码结构页。

页面左侧为代码导航栏 ,主体区域为代码详情页 ,以IDE形式组织代码,可以快速导航定位到代码文件并查看。

当进入单个文件详情页时,在对象上点击 可以跳转至对象的定义处 ,以及查看对象被引用的地方 。

代码行的最近一次提交记录 、代码文件的git提交记录的查看跟本地IDE上相同。

功能快速使用

当没有下载插件时,也能相同使用 Sourcegraph 功能。

只需将github项目地址域名前缀 由 github.com 替换为 sourcegraph.com/github.com ,即可进入到 Sourcegrpah 代码页

代码搜索

当你想对项目中代码进行查询时,Sourcegraph 也提供了代码搜索功能,页面上的搜索栏能提供检索。

以 fastjson 项目为例,定位在 JSONObject.java 文件时,搜索栏中自动填充内容为:

java 复制代码
context:global repo:^github\.com/alibaba/fastjson$ file:^src/main/java/com/alibaba/fastjson/JSONObject\.java

搜索关键字:

  • context:global:全局搜索上下文, 包含 Sourcegraph.com 上的所有存储库
    • 还可选择其它软件社区的上下文, 如 kubernetes、JVM
  • repo: 匹配仓库路径及分支
  • file: 匹配文件

文本内容支持正则表达式

搜索查询语法

Sourcegraph不仅支持仓库 及文件 的匹配,还能支持编程语言 、git历史提交记录 、时间范围等等的匹配搜索。

更多搜索语法参考:官网搜索查询语法文档

  • lang:指定编程语言
  • type:diff、type:commit:指定搜索类型(差异或提交)
  • before、after:指定时间范围
    • 时间范围的关键字仅限 diff 和 commit 类型搜索时使用
java 复制代码
context:global repo:^github\.com/alibaba/fastjson$ lang:Java
java 复制代码
context:global repo:^github\.com/alibaba/fastjson$ type:diff author:温绍锦

公共代码搜索

官网支持了对大量开源项目的搜索,跳转 -> 公共代码搜索功能地址

如果当我们想搜索下哪些项目中定义了 JSONObject 对象时,操作如图:

返回结果中包含了许多个不同编程语言的项目中,对 JSONObject 名称对象的定义。

至此,我们能感受到 Sourcegraph 介绍中说到的对跨存储库 、跨编程语言 与跨文件格式的功能表现。

部署

项目开源,官方也提供了多种部署方式文档,那谁能拒绝尝试本地部署一下呢!

若也想在团队项目中运用上,也不妨部署试试

Docker方式

部署

文档中提供了Docker方式部署命令

bash 复制代码
docker run 
--publish 7080:7080 
--publish 127.0.0.1:3370:3370 
--rm 
--volume ~/.sourcegraph/config:/etc/sourcegraph 
--volume ~/.sourcegraph/data:/var/opt/sourcegraph 
sourcegraph/server:5.2.4
  • --name:指定容器名称
  • -p/--publish:指定端口映射。本地端口:Docker容器端口
    • 将本地的7080端口映射到Docker容器的7080端口
  • --rm:退出时自动移除容器
  • --volume:指定挂载路径。本地路径:Docker容器路径
    • 将本地的 ~/.sourcegraph/config 路径挂载到Docker容器的 /etc/sourcegraph 路径,
      Docker容器中产生的数据会被保存到本地路径上
  • sourcegraph/server:5.2.4:指定 Sourcegraph 版本为 5.2.4

本地虚拟机环境参考

  • 软件:VMware Workstation Pro
  • 系统:Ubuntu 20.04
  • Docker 版本:24.0.5

本地部署成功,会显示出 Sourcegraph 图标;部署命令运行过程截图供参考:

创建管理员账号

部署成功后,即可在本地通过 7080 端口访问 Sourcegraph 服务,并创建管理员账号。

博主虚拟机地址为:192.168.159.128,即访问地址为:192.168.159.128:7080

若本机访问不到服务,可以检查以下方面

  • 不要请求地址:127.0.0.1:7080
    • 若对虚拟机 7080 端口添加了NAT端口转发,则可请求该地址
  • 虚拟机防火墙放开 7080 端口
    • sudo ufw allow 7080/tcp
  • 为局域网内机器 通过直接访问主机的 IP+端口,直接访问到虚拟机上服务
    • 需对虚拟机进行NAT端口转发
      • 路径:VMvare Worksattion Pro -> 编辑 -> 虚拟网络编辑器
      • 操作:对 VMnet8 网络进行NAT设置,添加端口转发,将虚拟机IP地址+服务端口转发到主机的端口

连接并同步远程仓库

当选择对github远程仓库进行连接时,配置中需要github个人访问令牌。

选择想同步的仓库,并等待仓库克隆完成、建立索引,一切完成后 Sourcegraph 就可提供服务了。

Docker Compose方式

  • 博主没有尝试Docker Compose部署方式了,参考文档放在下文,想要尝试的小伙伴可以试试

小结及参考资料

  • 感谢 mileOfSunshine 的博文
  • 期望本文对有此相关需求的小伙伴有一点点思路支持
相关推荐
椒哥7 小时前
一天被问几十次"允许",我统计了 517 次,然后写了个插件
前端·javascript·github
一点一木8 小时前
🚀 2026 年 10 月 GitHub 十大热门项目排行榜 🔥
人工智能·github
WANGXIN5679 小时前
攻克微信读书 Web 端「漏抓 40% 内容」顽疾:我开源了一个全书无损导出精排 PDF / EPUB / Markdown 工具
github
dong_junshuai9 小时前
每天一个开源项目#131 nvm:切换 Node 的关键在当前 Shell
github
miofly9 小时前
Mistral Large 4发布,万亿参数模型的编码与安全实测数据
开源·github
u13013010 小时前
GitHub 热榜项目:日榜(2026-11-01)
人工智能·github
wflynn12 小时前
GitHub 周榜趋势速报 | 2026-11-01
开源·github
u13013013 小时前
GitHub 热榜项目:周榜(2026-11-01)
人工智能·github
怕浪猫13 小时前
Super-agent 在各大模型厂商的应用情况
算法·面试·github
timegogo15 小时前
Emoji 语义化搜索
程序员·github