[安利] 代码搜索工具 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 的博文
  • 期望本文对有此相关需求的小伙伴有一点点思路支持
相关推荐
Web极客码10 小时前
WordPress“更新失败,响应不是有效的JSON响应”问题的修复
json·github·wordpress
是懒羊羊吖~15 小时前
图床 PicGo+GitHub+Typora的下载安装与使用
经验分享·笔记·github·typora·picgo
逛逛GitHub1 天前
刚刚!Open AI 宣布开源?
github
不是伍壹2 天前
【R语言】GitHub Copilot安装-待解决
github·copilot
虾饺爱下棋2 天前
pycharm上传github问题:rejected
人工智能·深度学习·github
鸠摩智首席音效师2 天前
如何在 GitHub 中创建一个空目录 ?
github
Mr.W.T2 天前
Spring Boot “约定大于配置”
github
不cong明的亚子2 天前
github用户名密码登陆失效了
git·github
QC七哥2 天前
git开发流程以及github社区企业版
git·github
邂逅you2 天前
GitHub基本操作及Git简单命令
git·github