pockestrap

Programmer's memo

PORTもくもく会でgitについてLTしてきた

freestyle-mokumoku.connpass.com

gist.github.com

後から見返した時 / 他の人が見た時、何を話したかさっぱりわからないと思うので発表したことについてブログを書きます。

.gitconfig

dotfiles/.gitconfig at master · pocke/dotfiles

このへんにあります。 この中のaliasの便利設定について話しました。

alias とは

長いコマンドに短縮名をつけることが出来ます。
例えば、

  • branch -> br
  • checkout -> co

などなど。

git status べんり

git status って、デフォルトだと表示がとても冗長です。

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   .vimrc

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    hoge

no changes added to commit (use "git add" and/or "git commit -a")

そこで、--short --branch オプションをつけてみます

$ git status --short --branch
## master...origin/master
 M .vimrc
?? hoge

このように簡略化されつつ必要な情報はすべて表示されます。便利。

またaliasでは単純にコマンドを短くすることだけでなく、オプションを付与することも可能です。
例えば、以下のようにaliasを設定することで常に上記のオプションを使用してgit statusgit stで実行することができます。

# In .gitconfig file
[alias]
  st     = status --short --branch
$ git st
## master...origin/master
 M .vimrc
?? hoge

このaliasのいいところは、「見なくてもいい情報が見えなくなる」ことだと思います。
見なくてもいい情報があると、その部分に目が惑わされてしまい、本当に見たいstatusを把握するまでに時間がかかってしまいます。
そのため、私はこの設定を推奨しています。

tig べんり

tigは便利です。入れましょう。

私はコミットログのビューワとしてしか使っていませんが、addとかcommitとかも出来るらしいです。

committia.vim べんり

Vimプラグインです。
コミットする時にカッコイイVimが立ち上がるようになって便利です。
Vimでコミットメッセージを書いている人は入れましょう。

git grep べんり (もしくは、 / べんり)

git grepという便利なコマンドがあります。レポジトリ内のファイルに対してgrepします。便利なので使いましょう。

また、以下のような設定を.zshrcなどに書いておくと、/だけでgrepできて、Vimっぽくて便利です

function is_git_dir()
{
  git rev-parse --show-toplevel > /dev/null 2>&1
}

function /()
{
  if  is_git_dir; then
    git grep $@
  else
    grep $@
  fi
}
$ / commit
.gitconfig:  ci     = commit -v
.gitconfig:  fix    = commit --amend -v
.gitconfig:  fixa   = commit --amend -v -a
.gitconfig:  ca     = commit -v -a
.vim/colors/p.vim:hi link gitcommitSummary Normal
.vimrc:  NeoBundle     'rhysd/committia.vim'
.vimrc:" committia.vim {{{
.vimrc:if neobundle#tap('committia.vim')
.vimrc:  let g:committia_hooks = {}
.vimrc:  function! g:committia_hooks.edit_open(info)
.vimrc:    imap <buffer><C-d> <Plug>(committia-scroll-diff-down-half)
.vimrc:    imap <buffer><C-u> <Plug>(committia-scroll-diff-up-half)
.vimrc:    nmap <buffer><C-d> <Plug>(committia-scroll-diff-down-half)
.vimrc:    nmap <buffer><C-u> <Plug>(committia-scroll-diff-up-half)
.vimrc:AutoCmd FileType gitcommit if getline(1) == '' | startinsert | endif
.vimrc:AutoCmd FileType markdown,text,gitcommit setl spell
.zshrc:  git init && git ci --allow-empty -m 'first commit'

ghq べんり

導入記事が沢山あるのでそちらをご覧下さい。 これについてはあんまり話しませんでした(ちょっとだけ見せた)

git = !git べんり

$ git git git status

みたいに打ってしまっても、意図どおりgit statusが効くという魔法のおまじないです。
以下のように~/.gitconfigに記載します。

[alias]
  git    = !git

再帰的に実行するので、何段でもgitを重ねることが出来ます。

git ってシェルに打ち込んで、「私は何をしたいんだっけ……?」って少し悩んでから「コミットしたいんだった!」って思い出してgit commitって打ち込んだらgit git commitが実行されてしまう私のような人におすすめです。

特急もくもく1号

特急もくもく 1号 西武秩父行き - connpass

主催者の人から「宣伝しておいてー」って頼まれたのでLTで宣伝しました。
今度行きます。特急列車内でもくもく会するらしいです。