最近gitをめぐる環境がいろいろとごちゃごちゃしてきたのでまとめる。
結論
add, commitする
=> github for mac
branch切る、マージする
=> git flow
branch切り替え、push/pull
=> legit
いろいろ試して、上記3ツールが利用者も多いし、枯れてそうなイメージなので、これらの記述がメイン。
oh-my-zsh
oh-my-zshのプラグイン。~/.zshrcのplugins=()のカッコのなかにスペース区切りで書くと適用される。
git
oh-my-zsh git aliases
gitエイリアス集。基本ですね。
$ gst = status
$ ga = add
$ gc = commit
$ gl = pull
$ gp = push
$ gco = checkout
$ grh = reset --soft HEAD
$ grhh = reset --hard HEAD
私はだいたいこいつらをよく使います。
あと、このプラグインは、プロンプトにカレントブランチ名表示してくれるのがありがたい。
git-extras, git-flow, github
後述の同名gitサブコマンドのtab補完プラグイン。エイリアスではありません。
github for mac
GitHub for Mac
「addする -> commitする」という一連の作業はこれが最強に使いやすい。それ専用GUIアプリだと思っている。GUIアプリなんだからコミットグラフがもっと見やすくてもいいのにね。
SourceTree
※methane - Qiitaさんにコメントで教えていただきました。ありがとうございます。
BitBucketのAtlassianさまがもたらされたGit, MercurialのGUIアプリ。github for macより高性能で、gitxよりビューが美しい。
そういえば、昔触ってみたことがあったが、当時はgitを本当に使い始めてすぐで、GUI使っちゃうとそれっきりでコマンドから使わなくなりそうで、結局使うのをやめたのを思い出しました。今は適材適所でよくね?という考え方になった。
subcommands
legit
Welcome | Legit (Git Workflow for Humans)
人間のためのgitワークフローとのこと。gitのコマンドをわかりやすいコマンド名でラップしてくれている。でも、そんなgitのコマンド、慣れればどうってことないですよね。
$ git switch
$ git sync
$ git publish
$ git unpublish
$ git branches
こいつらよく使う。
git-flow
nvie/gitflow
gitワークフローのベストプラクティス。それを推奨する(実践しやすくする)サブコマンド。
git-daily
先日興味を持ちましたが、git flow, github flowとの比較検討の末、魅力を感じなくなりました。
github
githubのリポジトリ作成とかをCUIでできますよ。これはgemでできている。
git-extras
visionmedia/git-extras
まだ使ってないけど、鉄板っぽい。
git-now
テンポラリコミット作成
tig
ターミナルgitブラウザ。入れてるけどたまにしか使わない。というか全く使わない。
まとめ
結局どのような文脈で、どのようなコマンドを打つのか。
コミット
$ gst
$ ga hoge.rb
$ gc
この後、$GIT_EDITORでコミットメッセージを書く。でもMacならgithub for macで簡単!
flow
それでは新機能のajax化の開発に取り掛かる。
$ g flow feature start ajax
$ ga xxx
$ gc
$ g publish
これでfeature/ajaxというブランチが切られ、そこにコミットされる。publishでoriginにfeature/ajaxブランチをつくる。ここでしばらく開発を続ける。だが・・・
おっと、ここでチームメイトがfeature/ajaxに変更を加えたらしい。
$ g sync
すると、pullしてからpushしてくれる。そんなこんなでajax化の仕事を進めていると、上司からバグ報告が飛んできたので、直ちにhotfixをはじめる。上司によると、IEでのCSSの様子がおかしいらしい。uncommited filesがない状態で(stashかcommit後で)
$ g flow hotfix start msie
$ ga app/assets/stylesheet
$ gc
このブランチで修正コミットを作ってから、
$ g flow hotfix finish msie
これでhotfix完了。デプロイする。
さてと、いま我々はajax化の最中だったな。
$ g switch feature/ajax
という感じ。かな?