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

Gitオブジェクトを共有して、リモートリポジトリーをクローンする

  「Gitオブジェクト」を共有して、「リモートリポジトリー」をクローンします。


  「リモートリポジトリー」をクローンする時、リポジトリーで最もHDDの容量を消費する「Gitオブジェクト」を「ローカルリポジトリー」にコピーせず、直接「リモートリポジトリー」の「Gitオブジェクト」を参照します。

  通常はコピーもしくはハードリンク

    通常「ローカルプロトコル」を使用して「リモートリポジトリー」をクローンすると、「Gitオブジェクト」は、コピーもしくはハードリンクで「Gitオブジェクト」を「ローカルリポジトリー」に配置します。

    「Gitオブジェクト」を共有すると、「リモートリポジトリー」クローン時に「Gitオブジェクト」のコピーやハードリンクを行いません。
    「ローカルリポジトリー」で「Gitオブジェクト」が必要になった時は、「リモートリポジトリー」の「Gitオブジェクト」を直接参照するようになります。

  クローン時のGitオブジェクトを共有

    共有する「Gitオブジェクト」は、クローン時の「Gitオブジェクト」が対象です。
    「ローカルリポジトリー」で行ったコミットは、直接「リモートリポジトリー」に反映されることはありません。


    コミット等で「ローカルリポジトリー」に生成した「Gitオブジェクト」は、「ローカルリポジトリー」に配置されます。
    そうしないと、バージョン管理が破綻するためです。

  参照先のGitオブジェクトがなくなることがある

    一般的なファイルのシンボリックリンクもそうですが、シンボリックリンクの参照先のファイルが削除されると、そのファイルにアクセスできなくなります。

    この事情は「Gitオブジェクト」を共有して作成した「ローカルリポジトリー」も同じです。
    クローン後、「リモートリポジトリー」でブランチを削除したりリベースを行うと、不要になった「Gitオブジェクト」が削除されます。


    この時、「ローカルリポジトリー」は必要な「Gitオブジェクト」にアクセスできなくなり、「ローカルリポジトリー」は破綻します。

    この状況に備えるには、「リパック」して「リモートリポジトリー」から「Gitオブジェクト」をダウンロードしておくなど、別途作業が必要になります。

    従って、この方法で「リモートリポジトリー」をクローンする際は、十分に注意してください。

オプションの説明

  Gitオブジェクトを共有するには、以下のオプションを指定します。

ロングオプション ショートオプション
--shared -s

  「Gitオブジェクト」の参照先のリポジトリーを追加指定することも可能です。
  「Gitオブジェクトを参照するリポジトリーを指定して、リモートリポジトリーをクローンする」を参考にしてください。

リモートリポジトリーのクローン例

  「Gitオブジェクト」を共有して、「リモートリポジトリー」をクローンする例です。

   1.ローカルリポジトリーの配置場所とリモートリポジトリー

    ここでは例として、「~/ドキュメント/git」フォルダー内に「myCloneProject」フォルダーを作成してもらい、「myCloneProject」フォルダー内にリポジトリーをクローンします。

    クローン元の「リモートリポジトリー」は、「~/ドキュメント/git/mySharedProject」です。


  2.カレントディレクトリーの移動

    「端末」を起動し、カレントディレクトリーを「~/ドキュメント/git」に移動します。


  3.コマンドの実行

    「リモートリポジトリー」をクローンします。
    コマンドの説明は、「リモートリポジトリーをクローンするコマンドの説明」を参考にしてください。

    ここでは、以下のコマンドを実行します。
    ポイントは、赤字の箇所です。

git clone --shared mySharedProject myCloneProject


  4.コマンドの実行結果

    以下のように、「リモートリポジトリー」がクローンされます。


  5.フォルダーの確認

    「Nautilus」を起動し「~/ドキュメント/git」フォルダーを見ると、以下のように「myCloneProject」フォルダーが作成されています。


  6.myCloneProjectフォルダーの確認

    「myCloneProject」フォルダーを開くと、クローンされたリポジトリーが配置されています。


    「.git」フォルダーが、「Gitディレクトリー」です。
    「myCloneProject」フォルダーが、「ワーキングディレクトリー」です。

    「test.txt」はチェックアウトされたプロジェクトのファイルです。

Gitオブジェクトの確認

  「Gitオブジェクト」が配置されるフォルダーを確認してみます。

  1.リモートリポジトリーのGitオブジェクト

    「リモートリポジトリー」の 「/objects」フォルダーを見ると、以下のように「Gitオブジェクト」が配置されています。


    「a3」や「a5」など、フォルダー名が2文字のフォルダー内に、様々な「Gitオブジェクト」が配置されています。

  2.ローカルリポジトリーのGitオブジェクト

    「ローカルリポジトリー」の 「.git/objects」フォルダーを見ると、以下のように「Gitオブジェクト」が配置されていません。


  3.参照先が記述されたファイル

    「ローカルリポジトリー」に「Gitオブジェクト」を配置する代わりに、「.git/objects/info/alternates」ファイルに、「Gitオブジェクト」の参照先情報が記述されています。


  4.参照先の内容

    「テキストエディター」で「alternates」ファイルを開くと、以下のように「Gitオブジェクト」の参照先が記述されています。


    「ローカルリポジトリー」でクローン時の「Gitオブジェクト」が必要なった時は、この参照先から「Gitオブジェクト」を取得します。

    この参照先は、「リモートリポジトリー」の「オブジェクトデータベース」を指していsます。

  5.ローカルリポジトリーでコミットを行うと

    「ローカルリポジトリー」でコミットを行うと、「Gitオブジェクト」は「ローカルリポジトリー」に配置されます。


    「b3」や「ba」など、フォルダー名が2文字のフォルダー内に、コミット時の「Gitオブジェクト」が配置されています。

    このように、「リモートリポジトリー」の「Gitオブジェクト」を参照するのは、クローン時に「リモートリポジトリー」にあった「Gitオブジェクト」です。


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