GitHub 上的这个开源项目也太有创意了吧!
大家好,我是小 G。
今天想给大家推荐的这个 GitHub 项目,并非是娱乐向的,而是纯技术向的。
我们都知道,Git 作为当下最为主流的分布式版本控制系统,已然成为程序员生活中不可或缺的一款开发工具。
在日常开发工作中,我们经常会使用 Git 来完成源码的追踪、回溯、保存、提交等各个操作,而在这一系列操作之下,久而久之,项目便难免会出现较为庞大的代码提交记录、开发分支、程序版本等各种信息。
这个时候,如果你想仅凭某个记忆片段,来查询某个作者在某个时间段所提交的一段具体代码,毫无疑问要耗费不少精力。
如果有这么一种方式,可通过编写数据库查询语句,来快速完成这些信息的检索,那是不是就能方便许多呢?
刚好,不久前就有一支来自国外的技术团队 Augmentable 帮我们完成了这件事情。
他们在 GitHub 上开源了一款工具:gitqlite,通过为 GitHub 项目创建一张虚拟的 SQLite 数据库表,进而达到能直接用数据库查询语句,快速检索 Git 仓库中的内容,其中包括 Git 提交记录、作者名称、邮箱、文件历史记录等内容。
https://github.com/augmentable-dev/gitqlite
开发者可根据自己的开发需求编写数据库查询语句,快速从 Git 仓库中提取精准信息。
比方说,你想提取 GitHub 项目中,所有参与代码贡献的作者邮箱,那么只需要编写下面这一行语句:
SELECT DISTINCT author_email FROM commits
如果是想查询某个提交命令上的所有被更改文件,则可用下面这条查询语句:
SELECT * FROM files WHERE commit_id='some_commit_id'
更进一步的,想要查看项目作者在不同星期几的代码提交次数,则可以用下面这段查询语句:
SELECT
count(*) AS commits,
count(CASE WHEN strftime('%w',author_when)='0' THEN 1 END) AS sunday,
count(CASE WHEN strftime('%w',author_when)='1' THEN 1 END) AS monday,
count(CASE WHEN strftime('%w',author_when)='2' THEN 1 END) AS tuesday,
count(CASE WHEN strftime('%w',author_when)='3' THEN 1 END) AS wednesday,
count(CASE WHEN strftime('%w',author_when)='4' THEN 1 END) AS thursday,
count(CASE WHEN strftime('%w',author_when)='5' THEN 1 END) AS friday,
count(CASE WHEN strftime('%w',author_when)='6' THEN 1 END) AS saturday,
author_email
FROM commits GROUP BY author_email ORDER BY commits
类似的组合玩法还有很多,目前看来最为实用的,是你帮你快速完成项目代码的统计与查询工作,当你下次要查询某个日期的代码修改片段时,基本就可以用一行查询语句快速搞定啦。
数据库玩的比较溜的同学,不妨尝试安装一下
- 希尔排序
- RxJava2 实战知识梳理(3) - 优化搜索联想功能
- ubuntu上安装Apache2+ModSecurity及自定义WAF规则
- C++中关于指针初始化和使用NULL的理解
- ViewPager 实现 Galler 效果, 中间大图显示,两边小图展示(优化篇)
- (虚)继承类的内存占用大小
- Linux服务器数据定期同步和备份方式
- Android组件化搭建
- ECMAScript 6 入门简介
- RxJava2 实战知识梳理(2) - 计算一段时间内数据的平均值
- 用了Docker,妈妈再也不担心我的软件安装了 - 基础篇
- 适配器模式(Adapter)
- 敞开的地狱之门:Kerberos协议的滥用
- CY7C68013A的一点总结
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JSP开发简单实例演示
- Linux笔记【003】| Linux系统目录结构与基本命令
- codeforces1322A(括号匹配)
- codeforces 1296D(贪心)
- codeforces 1399D
- JSP开发之JSTL介绍和使用
- codeforces 1283E(贪心)
- codeforces1216C (矩形面积交)
- codeforces 1234C(思维)
- codeforces 1405B(思维)
- codeforces 1216D(数学)
- codeforces 1256D(优先队列+贪心)
- codeforces 1343D(差分数组)
- codeforces1385D (递归+分治)
- codeforces1294D(思维+暴力)