Gitオブジェクトを参照するリポジトリーを指定して、リモートリポジトリーをクローンする
「Gitオブジェクト」を参照するリポジトリーを指定して、「リモートリポジトリー」をクローンします。「ローカルリポジトリー」から「Gitオブジェクト」を参照するリポジトリーのことを、「参照リポジトリー(Reference Repository)」と表現します。
参照に指定するリポジトリーはローカルプロトコルでアクセスする
オプションに指定するリポジトリーは、「ローカルプロトコル」でアクセスするリポジトリーでなければなりません。また、複数の「参照リポジトリー」を指定することができます。
Gitオブジェクトはコピーされない
この方法で「リモートリポジトリー」をクローンした場合、「ローカルプロトコル」でクローンした「リモートリポジトリー」を除いて、「ローカルリポジトリー」に「Gitオブジェクト」はコピーされません。「Gitオブジェクト」が必要になった時は、オプションで指定したリポジトリーを参照して「Gitオブジェクト」を取得します。
「Gitオブジェクトの共有」と同じ状況になります。
参照リポジトリーはGitオブジェクトの参照にだけ使用される
「ローカルリポジトリー」で行ったコミットは、直接「参照リポジトリー」に反映されることはありません。コミット等で「ローカルリポジトリー」に生成した「Gitオブジェクト」は、「ローカルリポジトリー」に配置されます。
さもないと、バージョン管理が破綻します。
ローカルプロトコルでアクセスするリポジトリーをクローンする時は
「ローカルプロトコル」でアクセスする「リモートリポジトリー」をクローンする時は、「Gitオブジェクトを共有する(--shared, -s)」オプションと併用すると良いです。「Gitオブジェクトを共有して、リモートリポジトリーをクローンする」を参考にしてください。
「ローカルプロトコル」の時はこのオプションを指定しないと、「Gitオブジェクト」の共有は行われません。
Gitオブジェクトのキャッシュの利用する
「Gitオブジェクト」の参照は、「Gitオブジェクト」のキャッシュに利用します。キャッシュとして利用する
この機能は主にキャッシュとして利用します。オプションで指定する「参照リポジトリー」は、キャッシュとして利用します。
「リモートリポジトリー」を公開しているサーバーに障害が発生しても、「参照リポジトリー」の「Gitオブジェクト」を参照するため、サーバーの障害に影響を受けません。
キャッシュの更新タイミングに注意
「ローカルリポジトリー」で操作を行った際、「Gitオブジェクト」が必要になった時は、「参照リポジトリー」から「Gitオブジェクト」を取得します。「参照リポジトリー」から、「ローカルリポジトリー」が必要とする「Gitオブジェクト」が削除されたとします。
この時「ローカルリポジトリー」が必要とする「Gitオブジェクト」が参照できなくなります。
結果、「ローカルリポジトリー」が破綻します。
キャッシュの更新タイミングに注意してください。
用が済むまでキャッシュを更新しないのも、一つの方法です。
ネットワークの負荷軽減
「参照リポジトリー」は「ローカルプロトコル」でアクセスするため、ネットワークの負荷を軽減することができます。また、ネットワークの負荷を軽減するだけでなく、必要な操作をより短い時間で終わらせることができます。
オプションの説明
Gitオブジェクトを参照するには、以下のオプションを指定します。オプション | オプションの値 |
---|---|
--reference | Gitオブジェクトを参照するリポジトリーのパス |
Gitオブジェクト参照するリポジトリー
Gitオブジェクト参照するリポジトリーは、カレントディレクトリーからの相対パスか、絶対パスで指定します。複数のGitオブジェクトを参照するリポジトリーを指定する場合は、リポジトリーごとに「--reference」オプションを指定します。
リモートリポジトリーのクローン例
「Gitオブジェクト」を参照するリポジトリーを指定して、「リモートリポジトリー」をクローンする例です。1.ローカルリポジトリーの配置場所
ここでは例として、「~/ドキュメント/git」フォルダー内に「myCloneProject」フォルダーを作成してもらい、「myCloneProject」フォルダー内にリポジトリーをクローンします。クローン元の「リモートリポジトリー」は、「git://192.168.56.1/mySharedProject」です。
2.参照リポジトリー
「Gitオブジェクト」を参照する「参照リポジトリー」は、「~/ドキュメント/git/mySharedProject」です。3.カレントディレクトリーの移動
「端末」を起動し、カレントディレクトリーを「~/ドキュメント/git」に移動します。4.コマンドの実行
「リモートリポジトリー」をクローンします。コマンドの説明は、「リモートリポジトリーをクローンするコマンドの説明」を参考にしてください。
ここでは、以下のコマンドを実行します。
git clone --reference mySharedProject git://192.168.56.1/mySharedProject myCloneProject
複数の「参照リポジトリー」を指定する場合は、リポジトリーごとに「--reference」を指定します。
git clone --reference mySharedProject --reference mySharedProject2 git://192.168.56.1/mySharedProject myCloneProject
5.コマンドの実行結果
以下のように、「リモートリポジトリー」がクローンされます。5.フォルダーの確認
「Nautilus」を起動し「~/ドキュメント/git」フォルダーを見ると、以下のように「myCloneProject」フォルダーが作成されています。6.myCloneProjectフォルダーの確認
「myCloneProject」フォルダーを開くと、クローンされたリポジトリーが配置されています。「.git」フォルダーが、「Gitディレクトリー」です。
「myCloneProject」フォルダーが、「ワーキングディレクトリー」です。
「test.txt」はチェックアウトされたプロジェクトのファイルです。
Gitオブジェクトの確認
「Gitオブジェクト」が配置されるフォルダーを確認してみます。1.ローカルリポジトリーのGitオブジェクト
「ローカルリポジトリー」の 「.git/objects」フォルダーを見ると、以下のように「Gitオブジェクト」が配置されていません。「.git/objects/pack」フォルダー内も、ファイルは配置されていません。
2.参照先が記述されたファイル
「ローカルリポジトリー」に「Gitオブジェクト」を配置する代わりに、「.git/objects/info/alternates」ファイルに、「Gitオブジェクト」の参照先情報が記述されています。3.参照先の内容
「テキストエディター」で「alternates」ファイルを開くと、以下のように「Gitオブジェクト」の参照先が記述されています。「ローカルリポジトリー」でクローン時の「Gitオブジェクト」が必要なった時は、この参照先から「Gitオブジェクト」を取得します。