超絶便利なGitクライアントのtigのすすめ

  • 276
    Like
  • 1
    Comment

tigはテキストベースのgitクライアントです。
tig.gif
(このgifでは、tigの起動からREADMEを適当に編集してcommitするまでやっています。)

全てのgitの機能が使えるわけではないのでうが、普段のgitの操作の大半はtigを使ったほうが断然便利です!
この記事では、tigの全部を紹介はできないのですが、基本的な操作からカスタマイズするための方法を紹介します。

URL/インストール

記事を書いたときの環境

  • mac
  • tig 2.2.1

 基本操作/カーソル移動

キー 挙動
j, k カーソルの上下移動
←,→ 左右にスクロール
enter サブビュー表示(詳細表示)。
Ctrl+D Ctrl+U
q 現在のビューを閉じる
Q tigを終了
/ 画面内の検索。prompt(下画面)に検索する文字を入力できます

basic3.gif

ビュー一覧

キー ビュー名 説明
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

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

statusビュー s

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

refsビュー r

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

logビュー l

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

treeビュー t

image
tを押すとtreeビューが表示されます。ディレクトリツリーです。
enterでファイルの内容が見れたり、eでファイルを編集できたり、bでblameを見れたりします。

grepビュー g

image

gを押すとprompt(画面下の部分)に文字が入力できるようになり、grepした文字を入力されると検索結果のgrepビューが表示されます。
enterでファイルの該当行を見たりできます。

blameビュー b

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

helpビュー h

image
hでhelpビューが表示されます。tigのキーバインドが表示されます。
キーを忘れたときはhです!

enterで開くサブビュー

(サブビューというのは勝手に名前をつけました><)
enterはカーソルが指している対象の詳細が見れます。画面が分割され一方に詳細が表示されます。

コミットでenter->diffビュー

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

statusビューでenter->stageビュー

image
statsuビューでenterを押すとstageビューが表示されます。diffビューと同様にファイルの変更内容が見れます。

ファイルでenter->blob

image

treeビューやgrepビューなどでファイルを選択しているときにenterでblobビューが表示されます。blobビューはそのファイルの内容を見ることができます。

refsビューでenter->main

image
refs(branch, tag一覧)ビューでenterを押すと、mainビュー(git tree)が表示されます。

O(shift+o)でサブビューをメインの表示に

O2.gif

qでサブビューを閉じる

開いたサブビューはqで閉じれます。

便利なコマンド

ここまではgitのコミットやブランチなどを見るためのツールとしてのtigの紹介だったのですが、
ここからはaddなどの操作をするための紹介です。

add file u

add.gif
statusビューでuでファイルのstage/unstage(add/reset)ができます。

add -p u, \(¥)

addchunk.gif

stageビューでuを押すと変更の一部(hunk/chunk)のstage/unstageができます。
(gitではhunk, tigではchunkと表記されています。)
また、\(¥)でchunkの分割ができます。

1行だけstage/unstage 1

stage.gif

stageビューで1を押すと、その行だけstage/unstageができます。

commit C(shift+c)

commit.gif

statusビューでCを押すとコミットができます。
git commitを実行したときと同じくエディターが立ち上がります。

cherry-pick C(shift+c)

cherrypick.gif

mainビューでC(shift+c)を押すとcherry-pickができます。

checkout branch C(shift+c)

checkout.gif

refs(branch, tag一覧)ビューでC(shift+c)を押すと、そのブランチ、tagにcheckoutできます。

blameを再帰的に ,

blame.gif

blameビューで,を押すと、カーソルが指しているコミットの前の時点のblameが見れます。
(この説明があっているかはちょっと怪しいです。。)

ファイルの編集 e

edit_conflict2.gif
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-splitfalseを設定しています。
設定できる項目の一覧はマニュアルのページに有ります。

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
特定のビューの場合はmaintree,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 commitbind refs ! ?git branch -D %(branch)のような書き方です。
コマンドの先頭の文字によって挙動が変わります。

  • !xxxx
    • コマンドを実行し、そのoutputも表示されます。
      • !git commitの場合、コミット入力画面になります。
  • ?xxxx
    • コマンドを実行する前にprompt(画面下)にy/nの確認が出ます。
  • @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 )やネットの記事を見てください。
(ただ古い記事だとキーバインドが違っていたりすることがあるので注意してください。)