kledgeb UbuntuやLinuxの最新情報を紹介

Ubuntu Git その41 - Gitオブジェクトを共有して、リモートリポジトリーをクローンする(git clone)

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オブジェクト」です。


Git
スポンサー
コメント
コメントポリシー
コメントをする前に UbuntuのCode of Conduct(CoC/行動規範) を確認し、CoCに沿ったコメントをお願いします。
コメントの使い方は、コメントの使い方を参照してください。
同一カテゴリーの記事
SNS
人気の記事
  • Ubuntu 22.04 その120 - UbuntuのブートローダーをBoot Repairで修復するには・Ubuntuが起動しないトラブルを解決
    UbuntuのブートローダーをBoot Repairで修復するには 「Boot Repair」はOSのブートローダーに起因するOSが起動しない問題を簡単に解決してくれるアプリです。
  • Ubuntu 22.04 その79 - 画面ロックの有効・無効を設定するには・画面ロック時の設定をカスタマイズするには
    画面ロックの有効・無効を設定するには 一定時間ユーザーによる操作がない時に、自動的に画面をロックしパスワードで保護したり、画面をブランク状態にできます。
  • Ubuntu 22.04 その95 - ディスプレイサーバーを切り替えるには・XorgとWayland
    ディスプレイサーバーを切り替えるには 「Ubuntu」はデフォルトで2種類のディスプレイサーバーを提供しています。
  • VirtualBox その125 - ゲストOSのUbuntuにLinux Guest Additionsをインストールするには
    ゲストOSのUbuntuにLinux Guest Additionsをインストールするには 仮想マシンにインストールしたゲストOSの「Ubuntu」に、「Linux Guest Additions」をインストールする方法です。
  • Linux その309 - This Week in Plasma の貢献者の募集と投稿頻度の抑制
    This Week in Plasma の貢献者の募集と投稿頻度の低下 KDE で This Week in Plasma の貢献者が募集されています。
  • Ubuntu 26.04 その5 - デイリービルドのディスクイメージが利用可能に・ディスクイメージのダウンロード
    デイリービルドのディスクイメージ Ubuntu 26.04 LTS のデイリービルドのディスクイメージが利用できるようになりました。
  • Ubuntu 26.04 その9 - Ubuntu Desktop 26.04 LTS の開発方針・プリインストールアプリの変更やソフトウェア管理の一元化など
    Ubuntu Desktop 26.04 LTS の開発方針 2025年11月26日、Ubuntu Desktop 26.04 LTS の開発方針がアナウンスされました。
  • Ubuntu nano その5 - 文字列を検索する
    文字列を検索する(Where Is)   文字列の検索は、部分一致と正規表現による検索が可能です。 検索の開始始点   現在カーソルのある位置から検索を行います。   もし、テキストの最後まで検索して文字が見つからない場合、   nanoはテキストの先頭から検索...
  • Ubuntuのバージョンと開発コードの対応表
    UbuntuのバージョンとUbuntuの開発コード 「Ubuntu」には各バージョンごとに開発コードが設定されます。
  • Ubuntu 22.04 LTSのインストール その5 - UEFI環境でパーティションの作成と構成 〜 ブートローダーのインストール先の選択
    UEFI環境でパーティションの作成と構成を行う UEFI環境でパーティションの作成と構成を行います。
記事のピックアップ
オプション