kledgeb Ubuntuの使い方や日本語化、アプリの使い方を紹介しています。

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オブジェクト」を取得します。


関連コンテンツ
同一カテゴリーの記事
コメント
オプション