HTTPプロトコル
「Git 1.6.6」以降では、Smart HTTPプロトコルによるアクセスをサポートしています。Smart HTTPプロトコルは、SSHやGitプロトコルと非常に似た動作をしますが、標準的なHTTP/HTTPSを利用でき、HTTP/HTTPSが提供するユーザー認証を利用できます。
受信と送信でアクセス制御を変えられる
後述する「Gitプロトコル」のように、誰でも「リモートリポジトリー」をクローンできるように設定できます。その一方で、ユーザーが「リモートリポジトリー」に変更内容を反映する時は、「SSHプロトコル」のようにユーザー認証を行い、通信を暗号化することも可能です。
同じURLで異なる動作を提供できる
同じURLで異なる動作をユーザーに提供できます。ブラウザーからアクセスすればWebサイトを表示し、gitからアクセスすればリポジトリーの操作を行うよう、動作を設定できます。
人気のプロトコル
Smart HTTPプロトコルは、最も人気のあるプロトコルになりつつあります。例えば、「GitHub」はSmart HTTPプロトコルを利用しています。
試しに「https://github.com/schacon/simplegit」にアクセスしてみてください。
gitからアクセスすれば、「リモートリポジトリー」のクローンなどの操作が可能です。
ブラウザーからアクセスすれば、Webサイトが表示されます。
Smart HTTPプロトコルの利点
このプロトコルの最も大きな利点は、ユーザーに分かりやすいインターフェースを提供できる点です。上記にも記述したとおり、1つのURLで動作を変えることができます。
ユーザーがブラウザーでURLにアクセスしたら、プロジェクトの概要や使い方など、ヘルプを表示することができます。
もちろんWebサイトから、プロジェクトのファイル群をダウンロードできるような仕組みも、提供できます。
gitからアクセスすれば、「リモートリポジトリー」にアクセスできます。
加えて、必要な時のみユーザー認証を行うことができます。
ユーザー認証は、ユーザー名とパスワードという簡潔な認証が利用でき、公開鍵認証のようなユーザにとって手間のかかる作業を必要としません。
HTTP/HTTPSはよく利用されるプロトコルですから、ファイアーウォールが設置されていても、「リモートリポジトリー」にアクセスできるケースは多いでしょう。
Smart HTTPプロトコルの欠点
他のプロトコルと比較して、欠点は無きに等しいです。SSHプロトコル
SSHを利用して「リモートリポジトリー」にアクセスする方法です。「Git」はSSHに対応しているため、SSHでサーバーにログインし、「リモートリポジトリー」にアクセスすることができます。
「ssh://ユーザー名@サーバーアドレス/リモートリポジトリーのフォルダー」のように記述すれば、リモートリポジトリーにアクセスできます。
ユーザー名を省略すると、Gitは現在ログインしているユーザー名でSSHサーバにアクセスします。
SSHプロトコルの利点
SSHには、様々な利点があります。インストールが簡単ですし、様々な管理ツールが提供されています。
また、SSHは昔から提供されている仕組みなので、使い慣れている人も多いでしょう。
ネットワーク上のデータは全て暗号化され、データの転送は可能な限りコンパクトにして転送を行うことができます。
SSHが提供している様々なユーザーの認証方式を、環境に合わせて選択することもできます。
SSHプロトコルの欠点
SSHは、サーバーにアクセスする際、必ずユーザー認証が必要になります。匿名によるアクセスができません。
「リモートリポジトリー」を不特定多数に公開できないため、誰でも「リモートリポジトリー」をクローンできるようにするには、別の方法を組み合わせる必要があります。
「Gitプロトコル」や「HTTP/HTTPSプロトコル」と組み合わせると良いでしょう。
Gitプロトコル
「Gitプロトコル」は、Gitデーモンによって提供されるプロトコルです。「Git」向けに用意されたプロトコルなので、パフォーマンスが良いですが、ユーザー認証を行う仕組みはありません。
Gitプロトコルの利点
「Gitプロトコル」によるデータの転送は、他のプロトコルよりもパフォーマンスに期待できます。しばしば、最高のパフォーマンスを出します。
特に不特定多数に巨大なプロジェクトを読み込み専用で公開するなら、「Gitプロトコル」でリモートリポジトリーを公開するとよいでしょう。
「SSHプロトコル」と同じ仕組みでデータ転送を行いますが、暗号化やユーザー認証を行わないため、その分のオーバーヘッドがありません。
Gitプロトコルの欠点
ユーザー認証を行う仕組みがないので、誰でも「リモートリポジトリー」にファイルを反映できてしまいます。「リモートリポジトリー」の操作を限定したい場合は、「リモートリポジトリー」の読み込みのみを不特定多数に許可し、「リモートリポジトリー」への書き込み操作は、「SSHプロトコル」や「HTTP/HTTPSプロトコル」と組み合わせる必要があります。
「Gitプロトコル + Smart HTTP」の組み合わせが良いでしょう。