- 在浏览了解 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 的博文
- 期望本文对有此相关需求的小伙伴有一点点思路支持