tigはテキストベースのgitクライアントです。

(このgifでは、tigの起動からREADMEを適当に編集してcommitするまでやっています。)
全てのgitの機能が使えるわけではないのですが、普段のgitの操作の大半はtigを使ったほうが断然便利です!
この記事では、tigの全部を紹介はできないのですが、基本的な操作からカスタマイズするための方法を紹介します。
URL/インストール
- homepage http://jonas.nitro.dk/tig/
- install方法 http://jonas.nitro.dk/tig/INSTALL.html
- macの場合は
brew install tig
- macの場合は
- gitリポジトリ https://github.com/jonas/tig
- マニュアル
記事を書いたときの環境
- mac
- tig 2.2.1
基本操作/カーソル移動
| キー | 挙動 |
|---|---|
| j, k | カーソルの上下移動 |
| ←,→ | 左右にスクロール |
| enter | サブビュー表示(詳細表示)。 |
| Ctrl+D | Ctrl+U |
| q | 現在のビューを閉じる |
| Q | tigを終了 |
| / | 画面内の検索。prompt(下画面)に検索する文字を入力できます |
ビュー一覧
| キー | ビュー名 | 説明 |
|---|---|---|
| m | main | デフォルトのビュー。いわゆるgit tree |
| s | status | git status |
| r | refs | branch, tag一覧 |
| l | log | git log |
| t | tree | ディレクトリツリー |
| g | grep | git grep |
| b | blame | git blame |
| h | help | tigのキーバインド一覧 |
mainビュー m

mを押すとmainビューが表示されます。
tigの起動時にも表示されるビューです。いわゆるgit treeのビューです。
enterでそのコミットの詳細を見れたり、C(shift+c)でcherry-pickしたりできます。
statusビュー s

sを押すとstatusビューが表示されます。git statusのビューです
enterでファイルの変更内容を見れたり、stage/unstage(add/reset)をしたりできます。
refsビュー r

rを押すとrefsビューが表示されます。branch, tagsなどが一覧されます。
enterでmainビュー(git tree)が見れたり、C(shift+c)でcheckoutしたりできます。
logビュー l

lを押すとlogビューが表示されます。git logです。
enterでそのコミットのdiffが見れたりします。
treeビュー t

tを押すとtreeビューが表示されます。ディレクトリツリーです。
enterでファイルの内容が見れたり、eでファイルを編集できたり、bでblameを見れたりします。
grepビュー g
gを押すとprompt(画面下の部分)に文字が入力できるようになり、grepした文字を入力されると検索結果のgrepビューが表示されます。
enterでファイルの該当行を見たりできます。
blameビュー b

statusビューやtreeビューなどでファイルを選択しているような状態のときにbを押すとblameビューが表示されます。
enterでその時のコミットを見れたり、,でblameを辿っていくことができます。
helpビュー h

hでhelpビューが表示されます。tigのキーバインドが表示されます。
キーを忘れたときはhです!
enterで開くサブビュー
(サブビューというのは勝手に名前をつけました><)
enterはカーソルが指している対象の詳細が見れます。画面が分割され一方に詳細が表示されます。
コミットでenter->diffビュー

mainビューやlogビューなどでコミットを指しているときにenterを押すとdiffビューがサブビューで表示されます。
statusビューでenter->stageビュー

statsuビューでenterを押すとstageビューが表示されます。diffビューと同様にファイルの変更内容が見れます。
ファイルでenter->blob
treeビューやgrepビューなどでファイルを選択しているときにenterでblobビューが表示されます。blobビューはそのファイルの内容を見ることができます。
refsビューでenter->main

refs(branch, tag一覧)ビューでenterを押すと、mainビュー(git tree)が表示されます。
O(shift+o)でサブビューをメインの表示に
qでサブビューを閉じる
開いたサブビューはqで閉じれます。
便利なコマンド
ここまではgitのコミットやブランチなどを見るためのツールとしてのtigの紹介だったのですが、
ここからはaddなどの操作をするための紹介です。
add file u

statusビューでuでファイルのstage/unstage(add/reset)ができます。
add -p u, \(¥)
stageビューでuを押すと変更の一部(hunk/chunk)のstage/unstageができます。
(gitではhunk, tigではchunkと表記されています。)
また、\(¥)でchunkの分割ができます。
1行だけstage/unstage 1
stageビューで1を押すと、その行だけstage/unstageができます。
commit C(shift+c)
statusビューでCを押すとコミットができます。
git commitを実行したときと同じくエディターが立ち上がります。
cherry-pick C(shift+c)
mainビューでC(shift+c)を押すとcherry-pickができます。
checkout branch C(shift+c)
refs(branch, tag一覧)ビューでC(shift+c)を押すと、そのブランチ、tagにcheckoutできます。
blameを再帰的に ,
blameビューで,を押すと、カーソルが指しているコミットの前の時点のblameが見れます。
(この説明があっているかはちょっと怪しいです。。)
ファイルの編集 e

statusやtreeビューででファイルの上にカーソルがある状態でeを押すとエディターが立ち上がります。
ちょっとしたコンフリクトの解消とかのときにお手軽で便利です。
カスタマイズ
上記で紹介したのはtigにあるコマンドの半分以下です。
まだコマンドはあるのですが、
~/.tigrcに設定を書くことがコマンドを変更・追加ができます。
また、見た目の変更などもできます。
デフォルトの設定は、僕の環境では/usr/local/etc/tigrc.default, /usr/local/etc/tigrcにあります。
ここでは基本的な設定の仕方を紹介します。詳細はマニュアルを見てください。
http://jonas.nitro.dk/tig/tigrc.5.html
set
値の設定です。
set vertical-split = false
この例ではvertical-splitにfalseを設定しています。
設定できる項目の一覧はマニュアルのページに有ります。
color
色の変更をすることができます。
color default default default normal
color cursor white green bold
color status green default
color delimiter magenta default
color "diff --" yellow default
color "@@" magenta default
color "+" green default
bind
キーバインドの変更・追加ができます。
bind <どのビューか> <キー> <実行するコマンドなど>
という書き方をします。
<どのビューか>
ここにはどのビューでそのキーバインドを有効にするか、を書きます。
どのビューでも有効にする場合は generic、
特定のビューの場合はmainやtree,statusなどそのビューを書きます。
<キー>
q
Q
,
<Up>
<C-P> # Ctrl+pです
<Tab>
<F5>
という指定の仕方です。
<実行するコマンドなど>
ここの指定の仕方は色々あるのですが、主な指定の仕方を紹介します。
scroll-page-downなどtigのコマンドを実行
bind generic k move-up
の場合、move-upつまりカーソルの移動になります
:toggle xxxxなど設定の変更
キーを押したときに一時的に設定の変更ができます。その変更を永続化するためにはtigrcに上記で紹介したsetコマンドを書く必要があります。
bind generic A :toggle date
の場合、dateの表示を切り替えられます。
任意のコマンドを実行
bind status C !git commitやbind refs ! ?git branch -D %(branch)のような書き方です。
コマンドの先頭の文字によって挙動が変わります。
-
!xxxx- コマンドを実行し、そのoutputも表示されます。
-
!git commitの場合、コミット入力画面になります。
-
- コマンドを実行し、そのoutputも表示されます。
-
?xxxx- コマンドを実行する前にprompt(画面下)に
y/nの確認が出ます。
- コマンドを実行する前にprompt(画面下)に
-
@xxxx- コマンドをバックグランドで実行します。outputは表示されません。
-
bind generic y @sh -c "echo %(commit) | pbcopy"としてあげれば、commitハッシュをクリップボードにコピーできます。
-
<xxxx- コマンド実行後にtigを終了するみたいです。使ったことないのでよくわかりません><
変数の参照
コマンドの部分に%(xxxx)と書くと変数が参照できます。
bind main C ?git cherry-pick %(commit)
の場合、カーソルが指している位置のコミットハッシュが%(commit)の部分に貼ります。
変数の一覧はマニュアルを見てください。
よく使うだろうものとしては、
| 変数 | 内容 |
|---|---|
%(commit) |
commitハッシュ |
%(branch) |
ブランチ名 |
%(file) |
ファイル名 |
%(tag) |
tag名 |
%(head) |
HEADのcommitハッシュ |
%(remote) |
remoteのブランチ名 |
%(prompt) |
%(prompt Enter new branch name: )のように書きます。promptに入力した内容が入ります。 |
カスタマイズ例
僕の設定の一部です。
(少し古いのでもしかしたら一部動かない・間違っている者あるかもしれません。。)
(今までに出てきたgifなどはこのカスタマイズしていない状態のものです。)
# サブビューを横分割にする
set vertical-split = false
# main viewの左端にコミットIDを表示する
set main-view = id date author commit-title:graph=yes,refs=yes
# checkout -b
bind branch B ?git checkout -b "%(prompt Enter new branch name:)" %(branch)
bind main B ?git checkout -b "%(prompt Enter new branch name: )"
# 差分の前後の表示行数(diff-context)を指定
set diff-context = 4
# reset hard
bind status <Ctrl-r> ?git reset --hard HEAD
# reflogをpagerで表示
bind generic W :!git reflog
# commitハッシュをコピー
bind generic y @sh -c "echo %(commit) | pbcopy"
# push
bind main U ?git poh "%(prompt Enter push branch => )" # poh = push origin HEAD:$1
# rebase
bind main <Ctrl-r> ?git rebase -i %(commit)
# リポジトリのGitHubを表示
bind generic ^ @hub browse
# 選択したbranchのcompare画面
bind branch [ @hub compare %(branch)
終わりに
僕もtigをバリバリカスタマイズして使いこなしている側ではないのですが、この記事を読んでもらえれば十分tigは使いこなせる内容になったかと思います。
より使いこなすには、デフォルトのtigrcや(僕の環境だと/usr/local/etc/tigrc.default, /usr/local/etc/tigrcにあります。)、マニュアル(http://jonas.nitro.dk/tig/manual.html , http://jonas.nitro.dk/tig/tigrc.5.html )やネットの記事を見てください。
(ただ古い記事だとキーバインドが違っていたりすることがあるので注意してください。)









