Git 2.5がリリース,ワークツリーをサポート,三角形ワークフローやパフォーマンスなどを改善

Git 2.5は,ワークツリー(worktrees),三角形ワークフロー(triangular workflows)の改善,パフォーマンス向上,さらに無数の改善と修正を含むメジャーリリースだ。

ワークツリー

ワークツリーは,同一Gitリポジトリ内に作業ツリーを追加して作成することのできる,新たな実験的機能だ。この機能の目的は,2つのブランチでの同時作業を容易にすることにある。これまでGitでは,ある時点ではひとつのブランチのみがアクティブになるように2つのブランチを切り替えるか,あるいは余分な同期作業が伴うのを承知の上で第2のローカルクローンを生成するか,いずれかの方法しかなかった。

ワークツリーを新たに作成するために,Gitはworktreeコマンドを用意している。

$ git worktree add -b hotfix ../hotfix origin/master

このコマンドは指定されたロケーション,ここでは../hotgixに新しいディレクトリを生成した上で,origin/masterからの新しいブランチをチェックアウトする。

第2のワークツリーを使用することで,例えば長時間を要するテストを現在のバージョンで実行しながら次バージョンのブランチで作業する,あるいは現行のブランチをスイッチアウトすることなく緊急フィックスを生成する,といった作業が可能になる。

ワークツリーはメインリポジトリにリンクされていて,すべてがお互いの知識を持っている。そのため,同じブランチから2つの異なるワークツリーをチェックアウトすることは,2つのワークツリーが同期を失うことを防止するため,できなくなっている。

三角形ワークフロー

三角形ワークフローは一般的に,コントリビュータのチームを調整するために使用される。基本的な考え方は,コントリビュータそれぞれが自身のフォークを所持しておいて,開発結果が公開可能になった時点でプルリクエストを発行し,最終的にそれをメインリポジトリにマージする,というものだ。

三角形ワークフローの扱いを容易にするために,Git 2.5では,新たに@{push}表記を追加している。これは,現在のブランチでプッシュ対象となるリモートトラッキングブランチの,参照時点での内容を表すものだ。最後のプッシュ以降に現在のブランチに追加されたコミットをすべてリストするような場合,この機能が利用できる。

$ git log @{push}

あるいは,

$ git log whizbang@{push}

のようにブランチを指定することも可能だ。

パフォーマンス

Git 2.5では,大規模なワークツリーやネットワーク化されたファイルシステムでのパフォーマンスが向上している。

  • git update-index --untracked-cacheでは実験的機能として,ディレクトリの更新時刻のみを確認することで,git statusのパフォーマンスが改善される。
  • git index-packでは,packed-refsディレクトリのスキャン回数を減らすことにより,ネットワークファイルシステムでのパフォーマンスが向上する。
  • 既存のパック済みオブジェクトを再利用して,utimeコールの回数を少なくすることにより,ネットワークファイルシステムでのパフォーマンスを向上する。

これら以外にもGit 2.5では,git p4でファイルタイプを識別することによるPerforceリポジトリのサポート改善や,ブランチの取り扱いの改善,その他リリースノートにあるような,数多くの機能改善や修正が含まれている。