8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NextremerAdvent Calendar 2016

Day 20

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

Last updated at Posted at 2016-12-20

これは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つでも参考になるものがあれば幸いです。
他にオススメのツールや設定があれば教えてください><

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?