これはNextremer Advent Calendar 2016の第20日目の記事です。
いろいろGit周りのツールや設定が増えてきたので並べてみる
何番煎じか分からないけど、私がGit周りで普段使っているツールや設定を並べてみる。
整理出来てないので見づらかったらごめんなさい。
補完
Gitのコマンドやブランチ名をタブで補完する
このファイルを~/
にDLしてきて、~/.bashrc
か~/.bash_profile
にsource ~/git-completion.bash
と書けばターミナル上でのGitコマンドやブランチ名のタブ補完が効くようになる。
もう必須レベルに便利
Log
コミットグラフを見る
git log --decorate --graph --name-status --oneline
でgit log
コマンドを使ってコミットグラフを見ることが出来る。SourceTreeやGitKraken使えばいいんだけど、ターミナルから出たくないときに便利。
こんな感じ。(redux-sagaのリポジトリよりコミットグラフを拝借
エイリアスに設定しておくとなお便利。
[alias]
graph = log --decorate --graph --name-status --oneline
Diff
Diffを見やすくする
git diff
を見やすくするためにdiff-so-fancy入れた。
Macだと、Homebrewで入るから簡単(brew install diff-so-fancy
)
あとは~/.gitconfig
に以下を追加すればgit diff
が素敵になる。
[alias]
diff = diff --color | diff-so-fancy
ブランチ
ブランチを更新日降順で並べる
git-flowやgithub-flowで運用してくと、削除し忘れてトピックブランチがローカルに大量に残ってしまうことがよくある(私だけ?
大体よく似たネーミングでブランチをきるため、ちょっと目を話すと自分がどのブランチで作業してたか見つけられなくなることがよくある(私だけ?
そこで、以下のコマンドを叩くとブランチを更新日降順で確認することが出来る。
git for-each-ref --sort='-authordate:iso8601' --format=' %(authordate:iso8601)%09%(refname)' refs/heads
ブランチを検索してチェックアウトする。
今日Git Advent Calendar 2016に上がってた記事のgit br
が超便利だったので紹介。
git br
でブランチ名をインクリメンタルサーチ出来てそのままチェックアウトまで出来るという素敵ライブラリ。
Bash
現在のブランチをBashに表示する
~/.bashrc
に以下の設定を追加することで、Bashに現在のGitのブランチを表示することが出来る。
export GIT_PS1_SHOWUPSTREAM=
export GIT_PS1_SHOWUNTRACKEDFILES=
export GIT_PS1_SHOWSTASHSTATE=
export GIT_PS1_SHOWDIRTYSTATE=
export PS1='\h\[\033[00m\]:\W\[\033[31m\]$(__git_ps1 [%s])\[\033[00m\]\$ '
どこかからパクってきた設定なので詳細は把握してない(汗
FishShellの場合
~/.config/fish/config.fish
に以下の設定を追加。カラー設定はよしなに。
set git_color red
function parse_git_branch
set -l branch (git branch 2> /dev/null | grep -e '\* ' | sed 's/^..\(.*\)/\1/')
set -l git_diff (git diff)
echo (set_color $git_color)'['$branch']'(set_color normal)
end
function fish_prompt
set -l git_dir (git rev-parse --git-dir 2> /dev/null)
set propmt (set_color yellow)(pwd)
if test -n "$git_dir"
echo $propmt (parse_git_branch)
else
echo $propmt
end
end
Vim
現在のブランチをVimに表示する
Vimでlightline.vimというステータスバーのカスタマイズ用のライブラリを導入しているので、そこに現在のブランチを表示する。VimからGitを扱うためのvim-fugitiveも必要。
let g:lightline = {
\ 'active': {
\ 'left': [ ['mode', 'paste'], ['fugitive'] ],
:
\ },
\ 'component_function': {
\ 'fugitive': 'MyFugitive',
:
\ }
\ }
function! MyFugitive()
try
if &ft !~? 'vimfiler\|gundo' && exists('*fugitive#head') && strlen(fugitive#head()) && winwidth(0) > 100
return "\ue0a0" . ' ' . fugitive#head()
endif
catch
endtry
return ''
endfunction
コミット & プッシュ
仮コミットを作る
こまめにコミットするのが面倒(主にコミットコメント作るのが)なので、git-nowを導入している。
MacだとHomebrewで楽ちん。brew install git-now
この辺は前の記事に書いてあるので参照。
仮コミットをPushしないようにする
git now
で作った仮コミットがPushされないようにPre-Push Hookを使っている。
これも前の記事に書いてある。
Git Worktreeが超便利だったので紹介
ツールでも設定でも無いけど、git worktree
を使ってみたら色々と便利だったので紹介する。
2〜3日前の私と同じで、難しそうと思って手を出せてない人の役に立てばうれしい。
いつか詳細に別記事つくってまとめたい。
worktreeとは
別のディレクトリを作って、そこに任意のブランチの作業スペースを用意してくれる的な感じのコマンド。
既存ブランチの作業スペースを作る
git worktree add <作業スペースの場所> <ブランチ名>
例えば git worktree add ./hoge topic-hoge
でカレントディレクトリにhoge
ディレクトリを作ってそこにtopic-hoge
ブランチの作業スペースが作られる。
新規ブランチの作業スペースを作る
git worktree add -b <新規ブランチ名> <作業スペースの場所> <新規ブランチの生成元ブランチ>
例えば git worktree add -b topic-hoge ./hoge master
でカレントディレクトリにhoge
ディレクトリを作ってそこにtopic-hoge
ブランチの作業スペースが作られる。topic-hoge
はmaster
ブランチから生成される。
worktreeの削除
作業スペースのディレクトリごと削除して、git worktree prune
を実行すればOK
## よくある使い方
例えば、hoge
ブランチで作業中にfuga
ブランチの修正をしたくなった場合、
従来だと
-
git stash
で作業内容を退避 -
git checkout fuga
でブランチを切り替え -
fuga
ブランチで作業 -
git checkout hoge
でブランチを戻す -
git stash pop
で作業内容を戻す -
hoge
ブランチの作業再開
という手順を踏む必要があったが、
git worktree
を使えば
-
git worktree add ./fuga fuga
で作業スペースを作成 -
cd fuga
でfuga
ディレクトリに移動してfuga
ブランチで作業 -
cd ../
でhoge
ブランチの作業再開
と、これだけの手順で実現出来る
さらに、fuga
ブランチの作業中もディレクトリを移動すればいつでもhoge
ブランチの作業に移れるのも魅力的。
エイリアス
コマンドが長かったのでエイリアス作ったった。
[alias]
w = worktree
nw = "!f(){ git worktree add ./$1 $1;};f"
wa = "!f(){ git worktree add ./$1 $1;};f"
nwm = "!f(){ git worktree add -b $1 ./$1 master;};f"
wam = "!f(){ git worktree add -b $1 ./$1 master;};f"
wrm = "!f(){ rm -rf $1 && git worktree prune;};f"
wrmb = "!f(){ rm -rf $1 && git worktree prune && git branch -D $1;};f"
最後に
急遽書くことになったため、ほんとにツールや設定並べただけの記事になっちゃいましたけど、何か1つでも参考になるものがあれば幸いです。
他にオススメのツールや設定があれば教えてください><