正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

Gitリポジトリのクローンをローカルコンピューターに作成する

Gitリポジトリのクローンをローカルコンピューターに作成できます。このアクションにより、リポジトリのコピーが作成され、コンピューターとGitLabサーバー間で変更を同期する接続が確立されます。この接続には認証情報を追加する必要があります。SSHを使用してクローンを作成するか、HTTPSを使用してクローンを作成することができます。認証方法として推奨されるのは、SSHです。

リポジトリのクローンを作成:

  • すべてのプロジェクトファイル、履歴、メタデータをローカルマシンにダウンロードします。
  • ファイルの最新バージョンを使用して作業ディレクトリを作成します。
  • 今後の変更を同期するために、リモート追跡を設定します。
  • 完全なコードベースへのオフラインアクセスを提供します。
  • プロジェクトにコードをコントリビュートする基盤を確立します。

SSHを使用してクローンを作成する

認証を1回のみにする場合は、SSHを使用してクローンを作成します。

  1. SSHのドキュメントの手順に従って、GitLabで認証します。

  2. 左側のサイドバーで、検索または移動先を選択して、クローンを作成するプロジェクトを見つけます。新しいナビゲーションをオンにしている場合、このフィールドは上部のバーに表示されます。

  3. プロジェクトの概要ページの右上隅で、コードを選択し、SSHでクローンのURLをコピーします。

  4. ターミナルを開いて、ファイルのクローンを作成するディレクトリに移動します。Gitはリポジトリ名を使用してフォルダーを自動的に作成し、そのフォルダーにファイルをダウンロードします。

  5. 以下のコマンドを実行します:

    git clone <copied URL>
  6. ファイルを表示するには、次のとおり、新しいディレクトリに移動します:

    cd <new directory>

HTTPSを使用してクローンを作成する

コンピューターとGitLabの間でオペレーションを実行するたびに認証を行う場合は、HTTPSを使用してクローンを作成します。OAuth認証情報ヘルパーを使用すると、手動で認証する回数を低減できるため、HTTPSエクスペリエンスがシームレスになります。

  1. 左側のサイドバーで、検索または移動先を選択して、クローンを作成するプロジェクトを見つけます。新しいナビゲーションをオンにしている場合、このフィールドは上部のバーに表示されます。

  2. プロジェクトの概要ページの右上隅で、コードを選択し、Clone with HTTPS(HTTPSでクローン)のURLをコピーします。

  3. ターミナルを開いて、ファイルのクローンを作成するディレクトリに移動します。

  4. 以下のコマンドを実行します。Gitはリポジトリ名を使用してフォルダーを自動的に作成し、そのフォルダーにファイルをダウンロードします。

    git clone <copied URL>
  5. GitLabがユーザー名とパスワードを要求します。

    アカウントで2要素認証(2FA)を有効にしている場合、アカウントのパスワードは使用できません。代わりに、以下のいずれかを実行できます:

    2FAを有効にしていない場合は、アカウントのパスワードを使用します。

  6. ファイルを表示するには、次のとおり、新しいディレクトリに移動します:

    cd <new directory>

Windowsでパスワードを複数回間違って入力し、Access deniedメッセージが表示される場合は、git clone https://namespace@gitlab.com/gitlab-org/gitlab.gitのパスにネームスペース(ユーザー名またはグループ)を追加します。

トークンを使用してクローンを作成する

次の場合、トークンを使用してHTTPSでクローンを作成します:

  • 2FAを使用する場合
  • 単数または複数のリポジトリをスコープとする、取り消し可能な認証情報セットが必要な場合

HTTPS経由でクローンを作成する場合、次のいずれかのトークンを使用して認証できます:

例:

git clone https://<username>:<token>@gitlab.example.com/tanuki/awesome_project.git

Apple Xcodeでクローンを作成して開く

.xcodeprojディレクトリまたは.xcworkspaceディレクトリがあるプロジェクトの場合、macOSのXcodeにクローンを作成できます。

  1. GitLab UIからプロジェクトの概要ページに移動します。
  2. 右上隅でコードを選択します。
  3. Xcodeを選択します。

プロジェクトのクローンがコンピューターに作成され、Xcodeを開くように求めるプロンプトが表示されます。

Visual Studio Codeでクローンを作成して開く

すべてのプロジェクトについて、GitLabユーザーインターフェースからVisual Studio Codeにクローンを作成できます。別の方法として、VS Code用GitLab Workflow拡張機能をインストールして、Visual Studio Codeからクローンを作成することもできます。

前提要件:

  • Visual Studio Codeをローカルマシンにインストールする必要があります。他のバージョンのVS Code、たとえばVS Code InsidersやVSCodiumなどはサポートされていません。

  • ブラウザをIDEプロトコル用に設定します。

  • GitLabインターフェースから:

    1. プロジェクトの概要ページに移動します。

    2. 右上隅でコードを選択します。

    3. IDEで開くで、**Visual Studio Code (SSH)またはVisual Studio Code (HTTPS)**を選択します。

    4. プロジェクトのクローンを作成するフォルダーを選択します。

      Visual Studio Codeがプロジェクトのクローンを作成すると、作成先のフォルダーが開きます。

  • 拡張機能をインストールしたVisual Studio Codeから、拡張機能のGit: Cloneコマンドを使用します。

IntelliJ IDEAでクローンを作成して開く

すべてのプロジェクトについて、GitLabユーザーインターフェースからIntelliJ IDEAにクローンを作成できます。

前提要件:

これを行うには、次の手順に従います:

  1. プロジェクトの概要ページに移動します。
  2. 右上隅でコードを選択します。
  3. IDEで開くで、**IntelliJ IDEA (SSH)またはIntelliJ IDEA (HTTPS)**を選択します。

ブラウザーをIDEプロトコル用に設定する

Open in IDE(IDEで開く)機能が動作するようにするには、ブラウザがvscode://jetbrains://などのカスタムアプリケーションプロトコルを処理するように設定する必要があります。

Firefox

必要なアプリケーションがシステムにインストールされている場合、Firefoxはカスタムプロトコルを自動的に処理します。カスタムプロトコルリンクを最初に選択すると、ダイアログが開き、アプリケーションを開くかどうかの確認を求められます。Open link(リンクを開く)を選択して、Firefoxでアプリケーションを開けるようにします。

今後プロンプトを表示しないようにするには、チェックボックスをオンにして選択内容を記憶させます。

プロンプトダイアログが開かない場合は、Firefoxを手動で設定する必要があります:

  1. Firefoxを開きます。
  2. 右上にあるOpen application menu(アプリケーションメニューを開く)( hamburger )を選択します。
  3. アプリケーションセクションを検索するか、そこに移動します。
  4. リストから目的のアプリケーションを見つけて選択します。たとえば、vscodejetbrainsです。
  5. ドロップダウンリストからVisual Studio CodeまたはIntelliJ IDEAを選択するか、**Use other…**を選択して実行可能ファイルを見つけます。

優先するIDEがリストにない場合は、対応するリンクを最初に選択したときに、アプリケーションを選択するように求められます。

Chrome

必要なアプリケーションがシステムにインストールされている場合、Chromeはカスタムプロトコルを自動的に処理します。Chromeでカスタムプロトコルリンクを最初に選択すると、ダイアログが開き、アプリケーションを開くかどうかの確認を求められます。オープンを選択して、Chromeでアプリケーションを開けるようにします。

今後プロンプトを表示しないようにするには、チェックボックスをオンにして選択内容を記憶させます。

クローンのサイズを小さくする

Gitリポジトリはサイズが大きくなるにつれて、以下の理由で処理しづらくなる可能性があります:

  • ダウンロードが必要な履歴の量が多い。
  • 必要なディスク容量が多い。

部分的なクローン作成は、リポジトリの完全なコピーがなくてもGitが機能できるようにする、パフォーマンスの最適化です。このような対処は、Gitが非常にサイズの大きいリポジトリをより適切に処理できるようにすることを目的に提供されています。

Git 2.22.0以降が必要です。

ファイルサイズでフィルタリングする

通常、Gitにサイズの大きいバイナリファイルを保存することは推奨されません。追加されたサイズが大きいファイルはすべて、その後クローン作成または変更のフェッチを行うすべてのユーザーによってダウンロードされるためです。このようなファイルのダウンロードは時間がかかり、特に低速であったり不安定であったりするインターネット接続から作業を行う場合には問題になります。

ファイルサイズでのフィルターを使用して部分的なクローン作成を使用すると、問題のあるサイズの大きいファイルをクローン作成やフェッチ対象から除外することで、この問題を解決できます。Gitは、見つからないファイルがあると、オンデマンドでのダウンロードとして処理します。

リポジトリのクローンを作成する際に、--filter=blob:limit=<size>引数を使用します。たとえば、1メガバイトを超えるファイルを除外してリポジトリのクローンを作成するには、以下を実行します:

git clone --filter=blob:limit=1m git@gitlab.com:gitlab-com/www-gitlab-com.git

これにより、次のとおりの出力が生成されます:

Cloning into 'www-gitlab-com'...
remote: Enumerating objects: 832467, done.
remote: Counting objects: 100% (832467/832467), done.
remote: Compressing objects: 100% (207226/207226), done.
remote: Total 832467 (delta 585563), reused 826624 (delta 580099), pack-reused 0
Receiving objects: 100% (832467/832467), 2.34 GiB | 5.05 MiB/s, done.
Resolving deltas: 100% (585563/585563), done.
remote: Enumerating objects: 146, done.
remote: Counting objects: 100% (146/146), done.
remote: Compressing objects: 100% (138/138), done.
remote: Total 146 (delta 8), reused 144 (delta 8), pack-reused 0
Receiving objects: 100% (146/146), 471.45 MiB | 4.60 MiB/s, done.
Resolving deltas: 100% (8/8), done.
Updating files: 100% (13008/13008), done.
Filtering content: 100% (3/3), 131.24 MiB | 4.65 MiB/s, done.

出力が長くなるのは、Gitが以下の処理を行うためです:

  1. 1メガバイトを超えるファイルを除外してリポジトリのクローンを作成する。
  2. デフォルトのブランチをチェックアウトするために必要となる、見つからないサイズの大きいファイルをダウンロードする。

ブランチを変更すると、Gitはさらに見つからないファイルをダウンロードする可能性があります。

オブジェクトタイプでフィルタリングする

数百万におよぶファイルや長い履歴があるリポジトリの場合、すべてのファイルを除外し、git sparse-checkoutを使用して、実行コピーのサイズを低減できます。

# Clone the repo excluding all files
$ git clone --filter=blob:none --sparse git@gitlab.com:gitlab-com/www-gitlab-com.git
Cloning into 'www-gitlab-com'...
remote: Enumerating objects: 678296, done.
remote: Counting objects: 100% (678296/678296), done.
remote: Compressing objects: 100% (165915/165915), done.
remote: Total 678296 (delta 472342), reused 673292 (delta 467476), pack-reused 0
Receiving objects: 100% (678296/678296), 81.06 MiB | 5.74 MiB/s, done.
Resolving deltas: 100% (472342/472342), done.
remote: Enumerating objects: 28, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (25/25), done.
remote: Total 28 (delta 0), reused 12 (delta 0), pack-reused 0
Receiving objects: 100% (28/28), 140.29 KiB | 341.00 KiB/s, done.
Updating files: 100% (28/28), done.

$ cd www-gitlab-com

$ git sparse-checkout set data --cone
remote: Enumerating objects: 301, done.
remote: Counting objects: 100% (301/301), done.
remote: Compressing objects: 100% (292/292), done.
remote: Total 301 (delta 16), reused 102 (delta 9), pack-reused 0
Receiving objects: 100% (301/301), 1.15 MiB | 608.00 KiB/s, done.
Resolving deltas: 100% (16/16), done.
Updating files: 100% (302/302), done.

詳細については、sparse-checkoutのGitドキュメントを参照してください。

ファイルパスでフィルタリングする

--filter=sparse:oid=<blob-ish>フィルター仕様を使用すると、部分的なクローン作成とスパースチェックアウト間のインテグレーションがより緊密になります。このフィルタリングモードでは、.gitignoreファイルと同様の形式を使用して、クローン作成やフェッチ時の対象とするファイルを指定できます。

sparseフィルターを使用した部分的なクローン作成は、現時点では実験段階です。クローン作成時やフェッチ時にスピードが落ちてGitalyリソースの使用率が大幅に増大する可能性があります。代わりにすべてのblobをフィルタリングしてスパースチェックアウトを使用します。git-sparse-checkoutにより、このようなタイプの部分的なクローン作成が簡素化され、この制限を克服できるためです。

詳細については、rev-list-optionsのGitドキュメントを参照してください。

  1. フィルター仕様を作成します。たとえば、数多くのアプリケーションがそれぞれルートのさまざまなサブディレクトリに存在する、モノリシックなリポジトリを想定します。次のとおりshiny-app/.filterspecファイルを作成します:

    # Only the paths listed in the file will be downloaded when performing a
    # partial clone using `--filter=sparse:oid=shiny-app/.gitfilterspec`
    
    # Explicitly include filterspec needed to configure sparse checkout with
    # git config --local core.sparsecheckout true
    # git show master:snazzy-app/.gitfilterspec >> .git/info/sparse-checkout
    shiny-app/.gitfilterspec
    
    # Shiny App
    shiny-app/
    
    # Dependencies
    shimmery-app/
    shared-component-a/
    shared-component-b/
  2. パスを使用してクローンを作成し、フィルタリングします。cloneコマンドを使用する--filter=sparse:oidのサポートは、スパースチェックアウトと完全には統合されていません。

    # Clone the filtered set of objects using the filterspec stored on the
    # server. WARNING: this step may be very slow!
    git clone --sparse --filter=sparse:oid=master:shiny-app/.gitfilterspec <url>
    
    # Optional: Check for missing objects that have not been fetched
    git rev-list --all --quiet --objects --missing=print | wc -l

    bash、ZshなどのGitインテグレーション、Git状態情報を自動的に表示するエディタは多くの場合、git fetchを実行して、リポジトリ全体をフェッチします。このようなインテグレーションは無効にするか、再設定する必要がある場合があります。

部分的なクローン作成のフィルタリングを削除する

部分的なクローン作成のフィルタリングを使用したGitリポジトリのフィルタリングは削除できます。フィルタリングを削除するには以下を実行します:

  1. フィルターが除外した内容をすべてフェッチして、リポジトリが完全であることを確認します。git sparse-checkoutを使用している場合は、git sparse-checkout disableを使用して無効にします。詳細については、disableのドキュメントを参照してください。

    次に、通常どおりfetchを実行して、リポジトリが完全であることを確認します。特にgit sparse-checkoutを使用していない場合に、フェッチするオブジェクトが不足していないかを確認します。以下のコマンドを使用できます:

    # Show missing objects
    git rev-list --objects --all --missing=print | grep -e '^\?'
    
    # Show missing objects without a '?' character before them (needs GNU grep)
    git rev-list --objects --all --missing=print | grep -oP '^\?\K\w+'
    
    # Fetch missing objects
    git fetch origin $(git rev-list --objects --all --missing=print | grep -oP '^\?\K\w+')
    
    # Show number of missing objects
    git rev-list --objects --all --missing=print | grep -e '^\?' | wc -l
  2. すべてをリパックします。これはたとえば、git repack -a -dを使用して実行できます。これにより、.git/objects/pack/に残るのは以下の3つのファイルのみとなります:

    • pack-<SHA1>.packファイル
    • 対応するpack-<SHA1>.idxファイル
    • pack-<SHA1>.promisorファイル
  3. .promisorファイルを削除します。上記のステップでは、pack-<SHA1>.promisorファイルが1つだけ残っているはずです。これは空であるはずであり、削除する必要があります。

  4. 部分的なクローン作成の設定を削除します。部分的なクローン作成に関連する設定変数は、Git設定ファイルから削除する必要があります。通常、削除する必要がある設定は次のとおりです:

    • remote.origin.promisor
    • remote.origin.partialclonefilter