もた日記

くだらないことを真面目にやる

Gitメモ : 「GRV(Git Repository Viewer)」ターミナルベースのリポジトリビューア

GRV(Git Repository Viewer)

github.com

ターミナルで使えるGitのリポジトリビューアとしてはTigを使っているが、Golangで書かれたGRVというツールがあったので試してみる。
GRVの特徴としては下記項目が挙げられている。

  • コミットログやブランチ、タグをクエリでフィルタ可能
  • 変更は自動で反映
  • 画面はタブとビューで構成
  • Vimライクのキーバインドでカスタマイズも可能
  • カラーテーマがカスタマイズ可能


インストール

Releasesにバイナリがあるのでダウンロードして実行権限を付けるのが簡単。
READMEにはビルド方法も書いてある。

$ wget -O grv https://github.com/rgburke/grv/releases/download/v0.1.1/grv_v0.1.1_linux64
$ chmod +x ./grv

ヘルプ情報

$ ./grv --version
GRV - Git Repository Viewer v0.1.1-0-g5d8a501 (commit: 5d8a501, compiled: 2018-02-03 09:50:05 GMT)
$ ./grv --help
Usage of ./grv:
  -logFile string
        Log file path (default "grv.log")
  -logLevel string
        Logging level [NONE|PANIC|FATAL|ERROR|WARN|INFO|DEBUG] (default "NONE")
  -repoFilePath string
        Repository file path (default ".")
  -version
        Print version


使い方

--repoFilePathでリポジトリのパスを指定すればよいが、デフォルトは.なのでリポジトリのディレクトリに移動してgrvを実行すればよい。
試しにGRVのリポジトリで実行してみる。

$ git clone https://github.com/rgburke/grv
$ cd grv
$ grv


画面構成

GRVは2つのタブで画面が構成されている。タブ(左上に表示)はgt, gTで移動でき、タブ内のビューはTab, Shift-Tabで移動できる。

  • History View : ヒストリービュー
    • Ref View : ブランチとタグを表示
    • Commit View : 選択したブランチ、タグのコミットを表示
    • Diff View : 選択したコミットの差分を表示
  • Status View : ステータスビュー
    • Git Status View : ステータスを表示
    • Diff View : 選択したファイルの差分を表示

f:id:wonder-wall:20180207211524p:plain

f:id:wonder-wall:20180207211547p:plain

キーバインド

デフォルトでVimライクなキーバインドになっているのでVimを使っている人なら迷わず使えるはず。なお、よく使うキーバインドは画面下部に表示されている。

  • h/j/k/l, gg, Gで移動
  • /, ?で検索(n, Nでマッチした箇所の移動)
  • gt, gTでタブ移動
  • Tab, Shift-Tabでビュー移動
  • fで現在ビューをフルスクリーン(トグル)
  • :でコマンド入力(:qで終了)
  • <Enter>でアイテム選択
  • <C-w>tでビューのレイアウト変更
  • qでビューを閉じる(ビューがない場合はタブを閉じる)

フィルタ機能

Ref ViewとCommit Viewではフィルタ機能が使えるようになっている。 Ctrl-qを押すとクエリを入力するモードになるので以下のような形式でクエリを入力する。

field CMP value

CMPで指定できるオペレータは下記。

=, !=, >, >=, <, <=, GLOB, REGEXP

例えば、コミットメッセージがMergeで始まるものをフィルタしたい場合は下図のように入力。

f:id:wonder-wall:20180207231516p:plain

f:id:wonder-wall:20180207215524p:plain

条件にはAND, OR, NOTも指定できるので、

authordate >= "2017-09-01" AND authordate < "2017-10-01" AND (authorname = "John Smith" OR authorname = "Jane Roe") AND parentcount < 2

のような条件も指定できる。
フィルタされた結果についてはCtrl-rで解除できる。

Commit Viewで使用可能なフィールドは下記。

 Field          | Type
 ---------------+-------
 authordate     | date
 authoremail    | string
 authorname     | string
 committerdate  | date
 committeremail | string
 committername  | string
 id             | string
 parentcount    | number
 summary        | string

Ref Viewで使用可能なフィールドは下記。

 Field | Type
 ------+-------
 name  | string


カラーテーマ

現状では3つのカラーテーマを選択できる。デフォルトはsolarizedだが、:でコマンド入力モードにして下記コマンドを入力するとカラーテーマを変更できる。カラーテーマのカスタマイズについてはこのページを参照。

:set theme cold

f:id:wonder-wall:20180207215744p:plain

:set theme classic

f:id:wonder-wall:20180207215806p:plain

設定ファイル

下記パスのどちらかにgrvrcファイルを作成すると設定が読み込まれる。

$XDG_CONFIG_HOME/grv/grvrc
$HOME/.config/grv/grvrc

例えば、set theme coldと記述した$HOME/.config/grv/grvrcファイルを作成すればカラーテーマが変更される。 その他の設定については、

set tabwidth 4

でタブ幅を変更したり、

map RefView a gg

のような形式でキーバインドを変更できる。

タブ、ビューの追加

下記コマンドで新規タブが追加できる。

addtab tabname

タブ名をmycustomtabにする場合は以下のようになる。

addtab mycustomtab

新規ビューを追加するコマンドは下記。

addview view viewargs...

使い方の例は以下の通り。

addview CommitView origin/master
addview DiffView 4882ca9044661b49a26ae03ceb1be3a70d00c6a2
addview GitStatusView
addview RefView

上記タブ、ビュー追加のコマンドについては設定ファイルにも記述できる。