はい、2014年も終わるということで。最新版の2.2を含んだ2.0 ~ 2.2で追加された注目機能をいくつか紹介したいと思います。なんといっても今年はメジャーバージョンアップのあった年ですからね。
2.0:git push のデフォルトオプションの変更
これは2.0の有名な変更点ですね。matching
から simple
に変更されました。ちょっとわかりにくい部分だと思うので詳しく説明します。
※ちなみに自分はそのどちらでもない nothing
を利用しています。
matching
今までのデフォルト、ローカルとリモートのブランチ名が同一であればすべてがpush対象
というものです。昔からgit使っている人は、「そのブランチpushしたかった訳じゃないんだよ!」という苦い思い出がある方もいるのではないでしょうかw
upstream
simple
を説明するためには、これを説明したほうがいいかもしれません。
upstreamが設定されている場合、そこにpushする。
というものです。自分は以前はこれを使っていました。
simple
upstreamが設定されていて、同名ブランチの場合のみpushする。
というものです。
git push -u origin feature/hogehoge
みたいに1度pushすると、set upstreamされます。すでにリモートブランチが存在する場合は、
git pull; git checkout feature/hogehoge
だけすれば、upstreamした状態で新しいブランチをcheckoutしてくれます。
※他にもset upstreamする方法はありますが一番簡単な方法だけ紹介しておきます。
nothing
一応、自分が利用している設定も紹介しておきます。
その名の通り、何もしない
git push
なんて省略せず毎度ちゃんと
git push origin feature/hogehoge
するぜ!という宣言になりますね。面倒に思われるかもしれませんが、安心できるし自分はなんだかんだでずっとこうやってます。(オススメはしませんw)
よくわからないよ。という人は。
git push -n
という --dry-run オプションで実際にpushせず、結果を出力だけすることができるので、試してみてください。
2.0:git add -A
パス指定無しの
git add -A
をサブディレクトリ内で実行したとしても、ツリー全体を処理する
というものですね。もしもカレントディレクトリを指定したい場合はピリオドを追加して下さい。
git add -A .
※git add -u も同じ挙動に変更されています。
これにより、以下の挙動も同じになるので注意してください。
git add <path>
git add -A <path>
余談ですが、 -A
というオプションのタイプが苦手で自分は --all
の方を利用していますw
2.0:git pull --ff-onlyのconfig化
git pull
をfast-forwardのみにしたい場合、git pull --ff-only
と打つ必要がありましたが、 pull.ff
設定をしておくことでデフォルト設定として振る舞えるようになりました。
案外知られてないし、嬉しい人多いのではないでしょうか?
2.1: vimdiff3サポート
vimmerは嬉しい。git mergetoolでvimdiff3をサポートするようになりました。
2.1: git grep フルパス出力
気づいている人は気づいている。git grepのデフォルトがフルパス出力になりました。
相対パスを想定していた人は、ハマる可能性のある変更点ですね。
git側も「注意してくれ」って言っているので、ご注意を。
2.1: git config tag.sort サポート
2.0でgit tag --listのソートオプションが増えましたが、それを tag.sort設定できるようになりました。
git config --global tag.sort version:refname
2.2: git config --edit --global
上記コマンド実行時に、設定ファイルがない場合はスケルトンファイルを元にした設定ファイルが生成されるようになりました。
2.2: git mergetool の一時ファイル
一時ファイルの作成周りも改善されました、一時ディレクトリ配下に作成されるようになったり、一時ディレクトリ自体の命名規約も変更になっています。
今年の流れや印象
ReleaseNoteを眺めてみると、git log
や git grep
の改善が目立ちますね。あとは署名系でしょうか。もちろん最適化による高速化も多く行われています。個人的に、git blameやgit diffはよく使うコマンドなので改善されるのは嬉しいですね。
ぜひ 他のReleaseNotesも見てみて下さい。日本人のメンテナもいたり、今回紹介した内容がほんの一部ということがわかるくらい、多くの改善内容が見れて楽しいですよ。
基本的には後方互換性のあるリリース内容ですが、Gitのすごいところは、互換性がない場合でもWarningやオプション、config設定などで困らないようにする「おもてなしの心」みたいなものが多く感じられるところです。
ドキュメントも丁寧でGitを愛する理由のひとつと言ってもいいかもしれません。
終わりに
はい、いかがでしょう。みなさんちゃんと最新のgit使っていますか?もしまだ2.2使ってない!という方がいましたら今すぐ最新のgitにしてみてください。(homebrew使っている場合は、2.1.3
になるらしいです。)
大丈夫、もし困ってもgitconfigでちゃんと設定すれば、ほとんどが昔のままのgitとして使うことができますから安心してください。
ツッコミあればコメントよろしくお願いします!