CLI上でGitのコミット情報などをSQL文で取得できるライブラリ「gitql」の紹介です。
バージョン管理として Gitは多くのプロジェクトで使われています。簡単な操作では特に問題はありませんが、少し複雑なことをしようとすると 多くのコマンドやオプションを覚える必要があります。
例えばSSHでログインしているサーバー上で、
" User1さんの2016年6月以降にコミットした、hashタグとメッセージの一覧情報を表示 " ... なんてあんまり考えたくないですよね?
そんなことが簡単にできるユーティリティツールが「gitql」で、上記のようなことが下のスニペットように書けます。
# User1さんの2016年6月以降にコミットした、hashタグとメッセージの一覧情報を表示
gitql "select hash, message from commits where author = 'User1' and date > '2016-06'"

' gitql ' はUnix系のOSで動作する' git log
'をSQLクエリで参照出来るライブラリで、Goで書かれています。
( * 参照するのに特化したライブラリなのでpushやadd, commit等の操作には対応していません )
gitqlはコマンドライン上で ' go get
' コマンドでパッケージを取得して、コンパイルします。
* GOとcmakeに依存しているので、事前に導入が必要です
# gitqlを'go get'で取得
go get -u -d github.com/cloudson/gitql
# path移動
cd $GOPATH/src/github.com/cloudson/gitql
# make
make
# コンパイル
sudo make install
## 下記を各環境によって、.bashrcや.zshrcなどに記述してください ##
# Linuxの場合
export LD_LIBRARY_PATH=$PWD/libgit2/install/lib
# Macの場合 *
export DYLD_LIBRARY_PATH="${GOPATH}/src/github.com/cloudson/gitql/libgit2/install/lib:${DYLD_LIBRARY_PATH}"
正しく導入されていると、' gitql
'コマンドが使えるようになります。
# gitql コマンドを叩くと下記のように表示されます
$ gitql
Gitql - Git query language
Usage: gitql [flags] [args]
Flags:
-p string
The (optional) path to run gitql (default ".")
-show-tables
Show all tables
-v The version of gitql
Arguments:
sql: A query to run
gitqlの操作は.git
ファイルがあるプロジェクトフォルダ上で行います。
主に 'commits
', 'remotes
', 'tags
', 'branches
', 'Refs
'を主テーブルとし、その5つから様々な情報が取得出来ます。
基本的な使い方は ' gitql " 参照する為のSQL文 "
'といった形になります。例えば、プロジェクトのコミット情報の一覧を表示する場合は下記のように。
# commit情報の一覧表示
gitql "select * from commits"

SQLと同じ使い勝手なので、表示させる項目にもフィルターをかけることが出来ます。
gitql "select hash, message, date from commits"

where句
もサポートされており、コミッターで絞ることも出来るので、複数人でのプロジェクトでは役立ちそうです。
# where構文
gitql "select hash, message, date from commits where committer='CommiterName'"
date比較もサポートされており where句の' and
'使えます。
# 日付比較 user1さんが2016年6月30日以降にコミットしたログを表示
gitql "select * from commits where committer='user1' and date > '2016-06-30'"
SQL文の' Like
'相当に該当する構文も用意されており、" ' keyword ' in column
"とういう形で使用します。
# Like文みたいなもの
# 文字'first'が含まれている箇所をmessageから検索
gitql "select * from commits where 'first' in message"
* サポートされているテーブル、カラム一覧
commits | remotes | tags | branches | Refs |
---|---|---|---|---|
author | name | name | name | name |
author_email | url | full_name | full_name | full_name |
committer | push_url | hash | hash | type |
committer_email | owner | hash | ||
hash | ||||
date | ||||
message | ||||
full_message |
以上がgitqlの紹介でした。
普段からデータベースを操作する人なら、直感的に操作できるので コマンドラインからのgitの操作に慣れていない人でも簡単に使うことができます。
ラーニングコストも数分ぐらいで済むレベルなので、サーバー管理者の人はプロジェクトサーバーにgitqlを入れておくと重宝しそうです。
GitHub : cloudson/gitql