Git 2.0がリリースされた。リリース候補版から1ヶ月程度でのリリースだ。ビットマップインデックスによる性能改善、センシブルデフォルトによる初心者の利便性向上などが特徴だ。既存ユーザにとっては、前のバージョンと同等の機能を維持する選択肢もある。
Gitのユーザは初期のリリースバージョンからこれらの機能に刺激を受けてきた。GitのメンテナであるJunio Hamano氏は次のように書いている(抜粋)。
..新しいリリースには刺激的なものがない(というひともいるかもしれません)が、私たちはまさにそのような言葉を既存のユーザから聞きたいのです。近頃のリリースでは、2.0以前の新しいデフォルトをユーザが使えるようにするためのノブを追加してきました。そして、1.x系と2.0リリースとの間には操作上の違いがあることを警告してきました。これまでGitを使ってきたユーザはきっと現時点までに十分に準備できていると思います。そして、"Git 2.0"は"デフォルトを放り投げる"最終ステップとして設計されています。
大きな改善点は以下の通り。
- pushがデフォルトで"simple"になる("matching"ではなく)。カレントのブランチをリモートの同じ名前のブランチに追加する。
- パスの指定無しで"git add -u"あるいは"git add -A"を実行した場合、サブディレクトリ内で実行した場合でもツリー全体を処理する。カレントディレクトリに対する追加を制限するにはピリオドを追加する("git add -u ."あるいは"git add -A .")必要がある。
- "git add <path>"と"git add -A <path>"が同じ挙動になる。
Felipe Contreras氏は後方互換性がない点について詳しく説明している。
ほかにも改善点がある。
- "-h"(no header)と"-c"(count)オプションをつけると"git grep"がネイティブのgrepに似た挙動になる。
- コミットを作成するコマンド、例えば、"-pull"や"-rebase"は"--gpg-sign"オプションを受け付ける(サインドコミットについてはこちらを参照)。
- "pull.ff"(ファーストフォワードのみ受け付け)、"git reset"のための"-N"オプション、"commit.gpgsign"("git commit"を使ったときに常にサインする)などの新しいオプションの追加。
- .gitignoreファイルの空白が警告され無視される(クオートされていれば無視されない)。
性能改善と実装の改善もなされている。
- JGitのビットマップインデックスが移植された。クローンやフェッチ処理でのカウントフェーズが劇的に改善する(インデックス用にいくらかのディスクスペースが必要)。
- "git log --cc"による、複数のペアレントの差分表示が最適化された。
詳細についてはリリースノートで確認できる。