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 26.04 その42 - Ubuntu 26.04.1 LTS のリリーススケジュール
    Ubuntu 26.04.1 LTSのリリーススケジュール Ubuntu 26.04.1 LTS のリリーススケジュールを紹介します。
  • Ubuntu 26.04 その68 - Ubuntu 26.04.1 LTS がリリースされました・ディスクイメージのダウンロード
    Ubuntu 26.04.1 LTS リリース 2026年8月27日、Ubuntu 26.04.1 LTS がリリースされました。
  • Linux Mint その292 - Linux kernel 7.0 採用の Linux Mint 22.3 リリース・システム管理ツールにカーネル管理機能追加など
    Linux Mint 月刊ニュース Linux Mint 開発チームは Linux Mint 月刊ニュースにて、Linux Mint の開発状況や取り組みを紹介しています。
  • Linux その422 - GNOME Boxes の再構築と未来・Flatpak のみの提供やモダンな機能の実装など
    GNOME Boxes の再構築と未来 GNOME Boxes の再構築と未来が以下で紹介されています。
  • Kubuntu その117 - Kubuntu 26.04 LTS にもっと手厚いサポートを・最高の信頼性を誇る KDE 搭載ディストリビューションを目指して
    最高の信頼性を誇る KDE 搭載ディストリビューションを目指して Kubuntu 26.04 LTS に手厚いサポートが導入されました。
  • Linux その421 - GNOME Shell のデザイン構想と長期的な見通し
    GNOME Shell のデザイン構想と長期的な見通し GNOME Shell のデザイン構想と長期的な見通しが、以下で紹介されています。
  • Linux その420 - KDE Plasma で実装予定の新機能や改善・UI レイアウトの調整やリモートデスクトップの改善など
    KDE Plasma で実装予定の新機能や改善 KDE Plasma で実装予定の新機能や改善を紹介します。
  • Windows その29 - Windows 向け Coreutils 登場・Coreutils のインストールやコマンドの一覧など
    Windows 向け Coreutils 登場 Windows 向け Coreutils が登場しました。
  • Ubuntu 24.04 その96 - Ubuntu 24.04.5 LTS のリリース日変更
    Ubuntu 24.04.5 LTS のリリース日変更 Ubuntu 24.04.5 LTS のリリース日が変更されました。
  • Ubuntu 18.04 その195 - PolicyKitにクラッシュや権限の昇格など複数の脆弱性・今すぐアップデートを
    PolicyKitの脆弱性 2018年7月16日、クラッシュや権限の昇格など複数の脆弱性に対応した「PolicyKit」がリリースされました。
記事のピックアップ
オプション