[安利] 代码搜索工具 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 小时前
【手撕 Spring】 -- Bean 的创建以及获取
java·后端·spring·面试·开源·github
zzxxlty2 小时前
MacOS 本地生成SSH key并关联Github
macos·ssh·github
曼陀罗2 小时前
【github】PR 的一些实用操作
github
aPurpleBerry9 小时前
【问题解决】Github上手动Delete file之后, git remote add+git push出错
git·github
MarcoAI9 小时前
github SSH连接(windows)
windows·ssh·github
KuaFuAI11 小时前
微软推出的AI无代码编程微应用平台GitHub Spark和国产AI原生无代码工具CodeFlying比到底咋样?
人工智能·github·aigc·ai编程·codeflying·github spark·自然语言开发软件
Mr_Xuhhh13 小时前
递归搜索与回溯算法
c语言·开发语言·c++·算法·github
用户31574760813521 小时前
成为程序员的必经之路” Git “,你学会了吗?
面试·github·全栈
墨染8661 天前
HP G10服务器ESXI6.7告警提示ramdisk tmp已满
github
油泼辣子多加1 天前
2024年11月13日Github流行趋势
github