[安利] 代码搜索工具 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:difftype:commit:指定搜索类型(差异或提交)
  • beforeafter:指定时间范围
    • 时间范围的关键字仅限 diffcommit 类型搜索时使用
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 的博文
  • 期望本文对有此相关需求的小伙伴有一点点思路支持
相关推荐
草梅友仁1 小时前
草梅 Auth 与 AI 开发心得 | 2025 年第 27 周草梅周报
github·ai编程·视觉设计
qianmoQ4 小时前
GitHub 趋势日报 (2025年07月02日)
github
A5资源网8 小时前
cloudflare配合github搭建免费开源影视LibreTV一个独享视频网站 详细教程
github
mortimer9 小时前
从零到一:构建一个 Chatterbox-TTS API 服务
开源·github·ai编程
真智AI9 小时前
利用 Claude Opus 4 自动化 GitHub 工作流:从安装到实战详解
运维·自动化·github
寻月隐君13 小时前
Rust 网络编程实战:用 Tokio 手写一个迷你 TCP 反向代理 (minginx)
后端·rust·github
喜欢吃豆14 小时前
快速手搓一个MCP服务指南(九): FastMCP 服务器组合技术:构建模块化AI应用的终极方案
服务器·人工智能·python·深度学习·大模型·github·fastmcp
油泼辣子多加1 天前
2025年06月30日Github流行趋势
github
ai小鬼头1 天前
AIStarter如何快速部署Stable Diffusion?**新手也能轻松上手的AI绘图
前端·后端·github
寻月隐君1 天前
Rust 异步编程实践:从 Tokio 基础到阻塞任务处理模式
后端·rust·github