tigの使い方とオプションをまとめた

CUIなGitクライアント。
普段使いのツールだが、社内勉強会の際に改めて調べた。
色々と便利なオプションがあった。

tigの特徴

  • Gitクライアント
  • CUI
  • マルチプラットフォーム

tigのいいところ

  • 軽い
  • インストールさえされていればX動いてなくても使える
  • ログのツリー見て、diff見て、編集のワークフローが快適
  • vim likeに使える

インストール

  • Linux/Windowsの人(apt使えるなら)
    • sudo apt-get install tig
  • Macとか
    • brew install tig

基本的な使い方

  • ターミナルでtigとタイプで起動
  • h押せばヘルプ出る
  • qで閉じる

vim likeなキーバインド

  • j, kで上下移動
  • /で検索

コミットログ見るとき

  • ブランチの枝分かれが見やすい
  • Enterで分割して、左がコミットログ、右がDiffが見れる
  • Diff見ながら<C-n>(next),<C-p>(previous)でコミット親・子を辿れる
  • Diffでカーソルがあたっている時、e(edit)で該当箇所をエディタで編集できる

Git logの代わりに

  • l: tigのlog view
    • git log
    • エンター押せばdiffも見える
  • m: tigのmain view
    • 一番使う
    • ツリー綺麗
    • エンター押せばdiffも見える

Git diffの代わりに

  • d: tigのdiff view
    • gitdiff同様、diffが見れる
    • git diff <コミットID> <コミットID>だとコミット間でdiff見れるけど、tigは1つ1つのコミット毎にDiffが出るのでちょっと使い勝手が異なる
  • tig <コミットID>..<コミットID>
    • コミットIDからコミットIDまでの履歴のみDiffが出る

Git statusの代わりに

  • s, S: tigのstatus view
    • u: ステージング/アンステージング
    • 1ファイル内に複数の変更がある場合はdiff viewでuで部分的にステージングできる
    • !: ワーキングスペースから取り除く(アンステージング状態のものに限る)

Git branchの代わりに

  • r: tigのbranch View
    • ブランチが見れる
    • エンター押すと分割されて、該当ブランチを中心としたグラフが見える
    • .tigrc入れて改造すると捗る

Git grepの代わりに

  • tig grep <検索文字列>
    • grepされた結果が出る
    • エンター押すと周辺ソースが見れる
    • eで該当箇所をエディタで開ける
    • syntax highlightが効かないところを除けば意外と便利

Git blameの代わりに

  • b/tig blame <ファイル名> : tigのblame view
    • blameしたあと開いたコミットにbで再帰的にblameできるので、どういうコンテキストで変更されたのかわかったりする
    • ちなみに<で戻れる

その他知っておくと捗る事

  • tig --all
    • リモート含めた全ブランチが見える
    • 仕事はじめにgit fetch, tig --allしてアップデート確認する儀式
    • rでbranch Viwe上のAll references選択時と同じ
  • tig [<ファイル名>, <ディレクトリ名>]
    • ファイルorディレクトリが関わる履歴のみが見える
  • tig [<ブランチ名>, <他のブランチ名>]
    • 対象ブランチに関わる履歴のみが見える
  • バッファの内容を更新したいときはRでリロード

~/.tigrcを弄ってカスタマイズ

# main-viewの左端にコミットIDを表示する
set main-view = id date author commit-title:graph=yes,refs=yes

# # Visualization
set id-width = 8
set blame-options = -C -C -C
set horizontal-scroll = 33%
set show-notes = yes
set show-changes = yes
set split-view-height = 80%
set status-untracked-dirs = yes
set tab-size = 2
set diff-context = 3
set ignore-space = some
set commit-order = topo
set ignore-case = yes
set wrap-lines = yes
set focus-child = yes

# Bind Settings
bind generic <C-f> move-page-down
bind generic <C-b> move-page-up
bind generic g move-first-line
bind main    G  none
bind main    G  move-last-line
bind generic G  move-last-line

# revertを定義
bind main v !?git revert %(commit)
bind diff v !?git revert %(commit)
bind main V !?git revert %(prompt) %(commit)
bind diff V !?git revert %(prompt) %(commit)

bind generic F none
bind generic F !git fe # git fetch

bind branch C !git co -b %(prompt) %(branch)
bind branch P !git push origin %(branch)
bind branch L !git pull origin %(branch)
bind branch H !git-browse-remote %(branch)

bind generic M none
bind branch M none
bind branch M !git merge %(branch)

bind status C !git commit -v

# `-` でステージ・アンステージをスイッチ
bind status u none
bind status - status-update
bind stage u none
bind stage - status-update
  • ショートカットをアサインする
    • view毎にアサインできるので色々仕込める
  • カラーテーマを変える
    • あまりテーマは見つからない。しかし、デフォルトが綺麗なのでそこまで必要性は感じていない
  • tig-explorer(https://github.com/iberianpig/tig-explorer.vim) というvim pluginをリリースした。