在程序员的世界里有两个东西是常青树,那就是Git和SQL(其实还有一个正则表达式),一个是代码存储和版本管理,一个是对关系数据库进行查询。在一切皆XX的世界中,一切皆Git,一切皆Sql也是最热门的两个方向,那么将Git和Sql结合起来用来呢,也有很多这样项目,本文虫虫就给大家介绍一些。
Git是一个开源的分布式版本控制系统,已成为时下软件版本控制的标准。克隆、分支和合并等基本操作;Fork-PR分布式协作流程,Git+Github(Gitlab)让全球数百万软件开发人员能够进行真正的分布式在线协作。
SQL或结构化查询语言是数据描述和查询的全球标准。诞生于上个世纪70年,至今已经流行了半个世纪,还在广泛使用,是每个开发者最熟悉最成熟的工具。
Git和SQL结合的方法,常见的想法有:
使用SQL来探索Git存储库。
SQL数据库文件使用Git仓库存储。
对SQL查询进行版本控制和共享。
更改SQL数据库引擎提供Git功能。
这些项目在本文提到项目都已经实现,其他可能想法也值得大家一起探索。
开发语言:Golang
星级:16K
最新版本:v1.29.0(2023年12月1日)
仓库地址: github /dolthub/dolt
Dolt从字面上理解Git+SQL的概念。Dolt完全模仿了Git命令行。对架构和数据执行差异和合并,冲突按单元格检测的。
Dolt本质上是一个SQL数据库,同时支持像Git仓库一样进行Fork、克隆、分支、合并、推送、拉取等Git操作。
Dolt支持像任何MySQL 数据库一样连接到 Dolt来读取或修改架构和数据。版本控制功能通过系统在SQL公开表、函数和过程。
和一般的Git仓库可以把仓库推送到GitHub一样,Dolt也提供了一个DoltHub,可以在线免费托管Dolt数据库。当然也可以通过自建DoltHub服务器。
在SQL中,git读取操作作为系统表公开,git写入操作作为SQL函数公开。此外,Dolt允许存储和版本查询,就像VersionSQL一样。
如果希望将Git概念应用到整个SQL数据库,Dolt适合。一个基本例子:
call dolt_checkout('-b','modifications');
update employees SET first_name='Timothy' where first_name='Tim';
insert INTO employees (id, first_name, last_name) values (4,'Daylon', 'Wilkins');
insert into employees_teams(team_id, employee_id) values (0,4);
delete from employees_teams where employee_id=0 and team_id=1;
call dolt_commit('-am', 'Modifications on a branch');
其结果:
开发语言:TypeScript,Golang
星级:385
最新版本:v2.3.2-beta (2023年11月14日)
仓库地址: github /mergestat/mergestat
mergestat是一个开源项目,旨在为软件工程团队提供分析。MergeStat提供命令行运行的mergestat-lite和具有有完全的用户界面MergeStat 通过将数据同步到PostgreSQL数据库,支持对构建和交付软件所涉及的数据源进行 SQL 查询。
其中命令行版本的mergestat-lite和Gitbase(使用Mysql语法的Sql),MergeStat使用SQLite SQL语法来实现任务。主要基于SQLite的虚拟表机制。
MergeStat实现了许多表,包括commits、commit_stats,blame,repo,pull-*等表该项目很酷且活跃,值得学习研究或者去贡献代码。
MergeStat提供具有有完全的用户界面,是为工程团队提供完全完整的运营分析,实现项目的活动分析,同时实现部分AppSec和DevSecOps实践的安全合规运营,比如CVE管理和报告、密码检测等。
MergeStat提供基于容器的便携式安装部署,可以基于docker-compose一键在本地部署并且使用:
开发语言:Rust
星级:1.5K
最新版本:v0.9.0(2023年12月3日)
仓库地址: github /AmrDeveloper/GQL
GQL是一种查询语言,其语法与SQL非常相似,具有一个微型引擎,可以对数据库文件的.git文件实例执行查询,该引擎动态执行查询,无需创建数据库文件或将.git文件转换为任何其他格式,请注意,GQL中的所有关键字与SQL类似并不区分大小写。
GQL可执行的Sql实例如下:
SELECT 1
SELECT 1 + 2
SELECT LEN("Git Query Language")
SELECT "One" IN ("One", "Two", "Three")
SELECT "Git Query Language" LIKE "%Query%"
SELECT DISTINCT title AS tt FROM commits
SELECT name, COUNT(name) AS commit_num FROM commits GROUP BY name ORDER BY commit_num DESC LIMIT 10
SELECT commit_count FROM branches WHERE commit_count BETWEEN 0 .. 10
SELECT * FROM refs WHERE type = "branch"
SELECT * FROM refs ORDER BY type
SELECT * FROM commits
SELECT name, email FROM commits
SELECT name, email FROM commits ORDER BY name DESC, email ASC
SELECT name, email FROM commits WHERE name LIKE "%gmail%" ORDER BY name
SELECT * FROM commits WHERE LOWER(name) = "amrdeveloper"
SELECT name FROM commits GROUP By name
SELECT name FROM commits GROUP By name having name = "AmrDeveloper"
SELECT * FROM branches
SELECT * FROM branches WHERE is_head = true
SELECT name, LEN(name) FROM branches
SELECT * FROM tags
SELECT * FROM tags OFFSET 1 LIMIT 1
开发语言:Python
星级:7.9K
最新版本:v1.7.3(2023年11月29日)
仓库地址: github /dbt-labs/dbt-core
DBT是一种非常流行的工具,用于将数据转换编写为SQL并对其进行版本控制。 DBT的重点是分析(在线分析处理-OLAP)工作负载。它允许分析工程师为由项目和模型组成的分析工作流程采用可重用、可组合的格式。
可以对DBT原语进行排序以构建大型数据管道。此外,单个格式化查询可以进行版本控制(例如在Git中),并在许多其他分析作业中重用。例如,有人将每日活跃用户查询编写为DBT模型,并且该模型在组织中的许多管道中使用。
DBT已经变得非常流行并且风靡一时。如果希望构建自己的Git+SQL风格的一栈式分析开发项目分析流,那么DBT是最适合工具。
开发语言:Golang
星级:2K
最新版本:v0.23.1(2019年7月5日)
仓库地址: github / src-d/gitbase
该项目由go-mysql-server的创建src-d创建,其目的是为Git存储库的数据库提供SQL接口。
例如,可以在Git存储库之上设置Gitbase并运行查询(注意使用标准MySQL客户端),一些实例如下:
SELECT
repo,
JSON_EXTRACT(stats, '$.Code.Additions') AS code_lines_added,
JSON_EXTRACT(stats, '$.Code.Deletions') AS code_lines_removed
FROM (
SELECT
repository_id AS repo,
COMMIT_STATS(repository_id, commit_hash) AS stats
FROM refs
WHERE ref_name = 'HEAD'
) t;
SELECT
repo,
JSON_UNQUOTE(JSON_EXTRACT(stats, '$.Path')) AS file_path,
JSON_UNQUOTE(JSON_EXTRACT(stats, '$.Language')) AS file_language,
JSON_EXTRACT(stats, '$.Code.Additions') AS code_lines_added,
JSON_EXTRACT(stats, '$.Code.Deletions') AS code_lines_removed
FROM (
SELECT
repository_id AS repo,
EXPLODE(COMMIT_FILE_STATS(repository_id, commit_hash)) AS stats
FROM refs
WHERE ref_name = 'HEAD'
) t
WHERE file_language <> '';
如果对Golang编写的开源SQL接口感兴趣,可以参考Gitbase学习,不幸的是,src-d已于2018 年停止运营。
本文我们介绍了Git和Sql两个伟大思想结合而产生一些开源项目,其中很多项目都是很有,可以直接拿来帮我们解决一些实际问题。当然他们都是一些很好的学习材料可以帮我们学习语言,如何将实际问题代码化,也可以作为贡献开源项目的目标,选择一个喜欢的项目贡献自己的代码或者其他任务。