BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Git 2.18がGitプロトコルバージョン2のサポートを追加

Git 2.18がGitプロトコルバージョン2のサポートを追加

原文(投稿日: 2018/06/29)へのリンク

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-wantsymrefの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

Adoption Stage
Style
 
 

この記事に星をつける

おすすめ度
スタイル

BT