Git 2.18で導入されたGitワイヤ(wire)プロトコルバージョン2が、最新バージョンの2.26でデフォルトとして使用されることになった。Git 2.26では設定オプションの処理やスパースチェックアウト(sparse-checkouts)などにも改良が加えられている。
Gitのワイヤプロトコルは、Gitのクライアントとサーバの相互通信方法を定義するプロトコルである。新バージョンではリファレンスのサーバ側でのフィルタリングが可能になったことにより、パフォーマンスが向上した。フィルタリングはブランチやタグだけでなく、例えばプルリクエストヘッドなどでも可能だ。Gitプロコトルバージョン2を採用したクライアントは、関心のあるリファレンスを指定することが可能であるため、サーバから送り返されるデータ量が削減される。これとは対照的に、Gitの元々のプロトコルの動作では、サーバがリポジトリ内の全リファレンスのリストの返送を開始するため、送信量が何メガバイトにも達する場合がある。
Gitプロトコルバージョン2の発表時に、GoogleのエンジニアであるBrandon Williams氏が提供した数値によると、新プロトコルは以前のものに比較して大幅に高速化されており、特にChromeのように500k以上のリファレンスを含む大規模なレポジトリで顕著である。Williams氏はさらに、次のように記している。
プロトコルv2ではさらに、googlesoucre.comサーバから送信されるオーバーヘッドバイト(非パックファイル)の8倍を削減することが可能です。この改善は主として、サーバによって通知されるリファレンスを、クライアントが関心の対象として表明している参照にフィルタリングしたことによるものです。
Gitプロトコルバージョン2をデフォルトにすることが遅くなった理由は、Taylor Blau氏がGitHubのブログに書いたところによると、プロトコルの実装にあるバグをキャッチするための十分な時間を開発者に提供することにあった。興味深いことに、Gitプロトコルバージョン2は、それを実装したクライアントであっても、旧GitプロトコルのみをサポートするGitサーバとの通信が可能なように設計されている。
Gitのリリースが毎回そうであるように、Git 2.26にもパフォーマンス改善、バグフィックス、新機能の非常に長いリストが含まれている。例えば、git clone --recurse-submodules --single-branch
では、サブモジュールにも--single-branch
オプションが適用されるようになった。
さらに、Git 2.25で導入されたgit sparce-checkout
コマンドに、新たにadd
サブコマンドが設けられた。スパースチェックアウトしたリポジトリに対して、新しいディレクトリを一度に追加するために使用できる。スパースチェックアウトは、おもに大規模なレリポジトリにおいて、コンテンツ全体ではなく一部のサブディレクトリにのみ関心がある場合に有効である。Git 2.25では、スパースチェックアウトにすでに含まれているディレクトリ内に新しいディレクトリを追加する場合、set
サブコマンドの使用時にそれらをすべてリストする必要があった。
diff
コマンドファミリの改良についても述べておく必要があるだろう。git add -p
において、空白文字の問題に対する処理方法が改善されている。
最後に、Git 2.26ではgit config --show-origin
を使うことで、デフォルトオプションがリポジトリ、ユーザ、システムのどのレベルで定義されているのかを簡単に確認できるようになった。
今回のリリースの詳細については、Git 2.26 official release notesを参照して頂きたい。