55
55

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.

GitAdvent Calendar 2014

Day 8

最新のGitで2014年を振り返る、ver2.0-ver2.2 までの注目すべき変更点

Posted at

はい、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 loggit grepの改善が目立ちますね。あとは署名系でしょうか。もちろん最適化による高速化も多く行われています。個人的に、git blameやgit diffはよく使うコマンドなので改善されるのは嬉しいですね。

ぜひ 他のReleaseNotesも見てみて下さい。日本人のメンテナもいたり、今回紹介した内容がほんの一部ということがわかるくらい、多くの改善内容が見れて楽しいですよ。

基本的には後方互換性のあるリリース内容ですが、Gitのすごいところは、互換性がない場合でもWarningやオプション、config設定などで困らないようにする「おもてなしの心」みたいなものが多く感じられるところです。

ドキュメントも丁寧でGitを愛する理由のひとつと言ってもいいかもしれません。

終わりに

はい、いかがでしょう。みなさんちゃんと最新のgit使っていますか?もしまだ2.2使ってない!という方がいましたら今すぐ最新のgitにしてみてください。(homebrew使っている場合は、2.1.3 になるらしいです。)

大丈夫、もし困ってもgitconfigでちゃんと設定すれば、ほとんどが昔のままのgitとして使うことができますから安心してください。

ツッコミあればコメントよろしくお願いします!

55
55
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
55
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?