リモートリポジトリーとローカルリポジトリー
既存のリポジトリーをクローン(コピー)すると、「リモートリポジトリー」と「ローカルリポジトリー」の関係が作られます。リポジトリーのクローンとリポジトリーの関係
すでにあるリポジトリーをクローンすると、クローン元のリポジトリーと、クローンしたリポジトリーが結び付けられます。この結びつけは、後で変更することができます。
あるリポジトリーで管理されているプロジェクトに参加するユーザーは、サーバーからリポジトリーをコピー(クローン)して、自分のPCにリポジトリーを構築します。
この時、クローン元のリポジトリーのことを、「リモートリポジトリー」と表現します。
自分のPCにコピーしたリポジトリーのことを、「ローカルリポジトリー」と表現します。
リモートリポジトリー名
1つの「ローカルリポジトリー」に複数の「リモートリポジトリー」を結びつけることができます。従って「ローカルリポジトリー」に、それぞれの「リモートリポジトリー」を区別する名称が必要になります。
デフォルトでは、クローン元のリポジトリーに「origin」という名称が付けられます。
リモートリポジトリー名は、ユーザーが指定したり、後で変更することができます。
リモートリポジトリーへのアクセス手段
共有したリポジトリーを他のユーザーに公開するには、他のユーザーがリポジトリーにアクセスできるよう、何かしらアクセス手段を提供する必要があります。このアクセス手段のことを、プロトコルと言います。
このプロトコルには、いくつか種類があります。
どの方法でも良いですが、「HTTPプロトコル」+「Gitプロトコル」の組み合わせが人気のあるプロトコルです。
Gitで利用できるプロトコル
「Git」で利用できるプロトコルには、以下の4種類があります。ローカルプロトコル
「ローカルプロトコル(Local Protocol)」は、最も基本的なプロトコルです。「リモートリポジトリー」を自分のHDDに配置し自分のPCから利用する場合や、LAN内で使用するなど、限られた範囲で使用するプロトコルです。
他のユーザーとリポジトリーを共有するには
他のユーザーとリポジトリーを共有するには、NFSなど共有フォルダーの仕組みを利用します。他のユーザーは、「リモートリポジトリー」が配置されている共有フォルダーを自分のPCにマウントし、「リモートリポジトリー」にアクセスします。
この時「Git」は、「ローカルプロトコル」で「リモートリポジトリー」にアクセスします。
URIの記述方法
「ローカルプロトコル」で「リモートリポジトリー」にアクセスする際、以下の2種類のURIの記述方法があります。- リモートリポジトリーのパス
- file://リモートリポジトリーのパス
「file://」の記述があるかどうかの違いですが、この記述の有無で少し動作が変わります。
違いは、「オブジェクトデータベース」のコピー方法です。
リモートリポジトリーのパス
「file://」の記述をせずリモートリポジトリーのパスを指定した場合、「Git」は「オブジェクトデータベース」のコピーを、ハードリンクによるコピーや、単純なフォルダーやファイルのコピーで行います。単純なコピーなので、「オブジェクトデータベース」内に不要な「Gitオブジェクト」が配置していた場合、それらのファイルもコピーされます。
この方法は、「file://リモートリポジトリーのパス」よりもパフォーマンスが良いです。
file://リモートリポジトリーのパス
「file://」の記述がある場合、ネットワーク越しに「リモートリポジトリー」があるかのような動作を行います。「オブジェクトデータベース」内の不要な「Gitオブジェクト」がコピーされないため、不必要な「Gitオブジェクト」がないキレイなクローンを行うことができます。
「オブジェクトデータベース」内の不要な「Gitオブジェクト」の整理は、「リモートリポジトリー」の管理者が整理する作業なので、特に問題がなければ「file://」の記述がないURIを利用すると良いでしょう。
ローカルプロトコルの利点
「ローカルプロトコル」の利点は、「リモートリポジトリー」の管理が簡単なことです。「リモートリポジトリー」をNFSで共有すれば、ユーザーのアクセス管理をNFS側で行うことができます。
「リモートリポジトリー」の共有に必要な多くの作業を、ユーザーが慣れ親しんだ方法で実現することができます。
ローカルプロトコルの欠点
インターネットなどLANを超えて共有フォルダーをマウントするには、様々な課題があります。そもそも共有フォルダーをマウントできるかどうか、共有できたとしても十分なパフォーマンスが期待できるかどうか、など課題が出てきます。
LAN内など、限られた範囲で使用するのがよいでしょう。