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 viewgit 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 viewu
: ステージング/アンステージング- 1ファイル内に複数の変更がある場合はdiff viewで
u
で部分的にステージングできる
- 1ファイル内に複数の変更がある場合はdiff viewで
!
: ワーキングスペースから取り除く(アンステージング状態のものに限る)
Git branchの代わりに
r
: tigのbranch View- ブランチが見れる
- エンター押すと分割されて、該当ブランチを中心としたグラフが見える
- .tigrc入れて改造すると捗る
Git grepの代わりに
tig grep <検索文字列>
- grepされた結果が出る
- エンター押すと周辺ソースが見れる
- eで該当箇所をエディタで開ける
- syntax highlightが効かないところを除けば意外と便利
- grepされた結果が出る
Git blameの代わりに
b
/tig blame <ファイル名>
: tigのblame view- blameしたあと開いたコミットに
b
で再帰的にblameできるので、どのようなコンテキストで変更されたのかわかったりする - ちなみに
<
で戻れる
- 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をリリースした。
- vimからtigを呼び出して開いたバッファを呼び出し元のvim共有できる。
- vim ⇔ tigを行き来できるようになる。
- tigを使うため、vimプラグインgitv(https://github.com/gregsexton/gitv) , agit(https://github.com/cohama/agit.vim) よりもPreviewにモタツキがない。