Gitクライアントの最新の公式バージョンであるGit 2.18でGitワイヤプロトコルのバージョン2が利用可能となった。バージョン2には、パフォーマンスとUIの向上を目的としたその他の新機能も含まれている。
Gitプロトコルバージョン2(v2)が数週間前にGitのマスターブランチに統合された。それは、コアチームメンバーのBrandon Williamsが公表した直前であった。Gitのワイヤプロトコルは、Gitクライアントとサーバが、clone、fetch、push操作をどのように伝達するかを定義している。この新しいバージョンは、パフォーマンスを向上させることを目的としており、将来の改善に適しているとWilliams氏は述べている。
新しいプロトコルの主な動機は、サーバ側で参照(ブランチとタグ)のフィルタリングを有効にすることでした。
つまり、Gitサーバは、リポジトリ内のすべての参照のリストをクライアントに送信し、クライアントにフィルタリングをさせる必要がない。大規模なリポジトリでは、クライアントが実行したい操作に関係なく、数MBのデータが転送される膨大な数の参照が存在する可能性がある。v2を使用する場合、Gitサーバはリストをクライアントに送り返す前に、必要な操作に基づいて参照をフィルタリングする。たとえば、Williams氏は、リモートでのコミットがいくつかしかないブランチを更新する場合、またはブランチが最新であるかどうかを確認する場合、参照のリスト全体を転送することは時間と帯域幅の無駄であると述べている。実際、Googleの内部でのv2の使用に基づいて、50万を超えるブランチやタグを含むChromeなどの大きなリポジトリでは、バージョン1に比べて最大3倍の高速アクセスが可能となるとWilliams氏は述べている。さらに、ref-in-wantやsymrefのfetchやpushなどの新機能を使うことができる。
v2を使用しているGitクライアントは、それをサポートしていない古いサーバと通信することができる。これは、v2で必要とされる追加情報をサイドチャネルを使用して送信するという意識的な決定のおかげである。古いサーバは単にサイドチャネルを無視し、参照の完全なリストで応答する。
開発者が使用したいプロトコルのバージョンを選択できるように、Gitは次の例のように新しい-c
コマンドラインオプションを追加した。
git -c protocol.version=2 ls-remote
v2をデフォルトにするように、Gitの設定を変更することができる。
git config --global protocol.version=2
パフォーマンスを改善することを目的としたGit 2.18のもう一つの新機能は、シリアライズされたコミットグラフである。基本的に、Gitはコミットグラフ構造をファイルに保存しており、グラフウォークを高速化するためのメタデータが追加されている。これは、コミット履歴の一覧表示やフィルタリング、あるいは、マージベースの計算に特に効果的である。この機能を実装したMicrosoftのチームのメンバーであるDerrick Stoleによると、LinuxカーネルやGit自身のような大きなリポジトリに対して実行すると、そのような機能を75~99%高速化することができる。Gitコミットグラフはまだ実験的である。その理由は、いくつかのGit機能は、浅いクローン、置換オブジェクト、コミットグラフトなどのコミットグラフでうまく動作しないためである。それらを必要としない場合は、git config core.commitGraph true
を実行してコミットグラフを有効にすることができる。
公式リリースノートでGit 2.18の全機能一覧を読んでください。
Rate this Article
- Editor Review
- Chief Editor Action