Edited at
NextremerDay 20

Gitの使ってるツールや設定晒す

More than 1 year has passed since last update.

これはNextremer Advent Calendar 2016の第20日目の記事です。


いろいろGit周りのツールや設定が増えてきたので並べてみる

何番煎じか分からないけど、私がGit周りで普段使っているツールや設定を並べてみる。

整理出来てないので見づらかったらごめんなさい。


補完


Gitのコマンドやブランチ名をタブで補完する

このファイル~/にDLしてきて、~/.bashrc~/.bash_profilesource ~/git-completion.bashと書けばターミナル上でのGitコマンドやブランチ名のタブ補完が効くようになる。

もう必須レベルに便利


Log


コミットグラフを見る

git log --decorate --graph --name-status --oneline

git logコマンドを使ってコミットグラフを見ることが出来る。SourceTreeやGitKraken使えばいいんだけど、ターミナルから出たくないときに便利。

こんな感じ。(redux-sagaのリポジトリよりコミットグラフを拝借

スクリーンショット 2016-12-20 21.43.52.png

エイリアスに設定しておくとなお便利。


~/.gitconfig

[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が素敵になる。


~/.gitconfig

[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のブランチを表示することが出来る。


~/.bashrc

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も必要。


~/.vimrc

    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-hogemasterブランチから生成される。


worktreeの削除

作業スペースのディレクトリごと削除して、git worktree pruneを実行すればOK


 よくある使い方

例えば、hogeブランチで作業中にfugaブランチの修正をしたくなった場合、

従来だと

1. git stashで作業内容を退避

2. git checkout fugaでブランチを切り替え

3. fugaブランチで作業

4. git checkout hogeでブランチを戻す

5. git stash popで作業内容を戻す

6. hogeブランチの作業再開

という手順を踏む必要があったが、

git worktreeを使えば

1. git worktree add ./fuga fugaで作業スペースを作成

2. cd fugafugaディレクトリに移動してfugaブランチで作業

3. cd ../hogeブランチの作業再開

と、これだけの手順で実現出来る

さらに、fugaブランチの作業中もディレクトリを移動すればいつでもhogeブランチの作業に移れるのも魅力的。


エイリアス

コマンドが長かったのでエイリアス作ったった。


~/.gitconfig

[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つでも参考になるものがあれば幸いです。

他にオススメのツールや設定があれば教えてください><