RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

【Git入門】git cloneで既存リポジトリをクローンしよう!

Gitの既存リポジトリを使って開発を始めるにあたって、皆さんまずはリポジトリを複製しますよね?
本投稿では、git cloneコマンドの基本的な使い方〜便利なオプションの紹介をさせていただきます。
Gitを使い始めたばかりの方から、オプションは使用していなかった!という玄人の方まで、開発する際の参考にしていだければ幸いです。

弊社ブログのGitに関わる関連記事もぜご一読ください!
- 【超入門】初心者のためのGitとGitHubの使い方
- 【Git入門】git stashで作業を便利に退避する
- 【Git入門】git commitを取り消したい、元に戻す方法まとめ

目次

git cloneって?

git cloneとは、既存のリポジトリをローカル環境に複製するコマンドのことです。
リポジトリの場所はリモートでもローカルでも構いません。

Gitではソースコードだけでなく、

  • 画像
  • markdown等のテキストファイル
  • ER図、UML図等の画像を生成するファイル

等、開発に使用するための様々なファイルを格納することが可能です。
ER図、UML図等はGitHubやGitLab上で描画できるので、ソースコード以外でバージョン管理したいファイルも全て集約することができますね。

git cloneの基本的な使い方

$ git clone [リポジトリパス]

上記コマンドにより、指定したリポジトリをカレントディレクトリに複製することができます。
指定がない場合はリポジトリの名前のままでローカルに保存されます。
GitHubリポジトリを指定した際の使用例を以下に記します。

$ git clone https://github.com/[ユーザー名]/[リポジトリ名].git

privateリポジトリの場合は、git clone時にパスワード認証かSSH公開鍵の設定が必要となります。

別名で保存したい場合

ローカルに保存する際に別名を指定したい場合は、下記のようにディレクトリ名をパスの後ろに記載します。

$ git clone [リポジトリパス] [ディレクトリ名]

ディレクトリ名が更新されるだけで、リポジトリの内容は変わりません。

カレントディレクトリ以外に保存したい場合

指定がない場合はカレントディレクトリに保存されますが、別ディレクトリの指定も可能です。

$ git clone [リポジトリパス] [パス]/[ディレクトリ名]

パスには絶対パス相対パスどちらでも指定可能です。

git cloneのオプション紹介

git cloneコマンドには様々なオプションがあります。
オプションは以下コマンドで参照可能です。

$ git help clone

コマンドを実行すると、以下のような結果が出力されます。

NAME
       git-clone - Clone a repository into a new directory

SYNOPSIS
       git clone [--template=<template_directory>]
                 [-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror]
                 [-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>]
                 [--dissociate] [--separate-git-dir <git dir>]
                 [--depth <depth>] [--[no-]single-branch] [--no-tags]
                 [--recurse-submodules[=<pathspec>]] [--[no-]shallow-submodules]
                 [--[no-]remote-submodules] [--jobs <n>] [--sparse]
                 [--filter=<filter>] [--] <repository>
                 [<directory>]

DESCRIPTION
       Clones a repository into a newly created directory, creates remote-tracking branches for each branch in the cloned repository (visible using git branch --remotes), and creates
       and checks out an initial branch that is forked from the cloned repository’s currently active branch.

(中略)

OPTIONS
       -l, --local
           When the repository to clone from is on a local machine, this flag bypasses the normal "Git aware" transport mechanism and clones the repository by making a copy of HEAD
           and everything under objects and refs directories. The files under .git/objects/ directory are hardlinked to save space when possible.

(後略)

コマンドの使い方とオプションに関する説明が詳細に出力されます。
英語が堪能な方はこちらの公式ヘルプだけでなんとでもなりそうですね。

本投稿ではこのオプション群の中からいくつかを抜粋して紹介させていただきます。

オプション ショートオプション 用途
--branch -b クローンしたいブランチを指定する
--quiet -q クローン時のメッセージを非表示にする
--origin -o originに別名を付ける
--depth 指定数のコミットのみを取得する
--no-checkout -n チェックアウトを行わない

※以降の例ではショートオプションをしています。

クローンしたいブランチを指定する

git cloneコマンドは指定がない場合mainブランチを取得しますが、特定のブランチを指定したい場合は-bオプションを使用します。

$ git clone -b [指定したいブランチ名] [リポジトリパス]

クローンされたリポジトリgit branchコマンドを実行すると、指定したブランチ名で複製されていることが確認できます。
また、ブランチ名の代わりにタグを指定することも可能です。

クローン時のメッセージを非表示にする

git cloneコマンドはデフォルトで下記のような進捗状況が出力されるようになっています。
--progressオプションと同様の動きをします。)

Cloning into 'XXXXX'...
remote: Enumerating objects: XXX, done.
remote: Counting objects: 100% (XX/XX), done.
remote: Compressing objects: 100% (XX/XX), done.
remote: Total XXX (delta X), reused XXX (delta X), pack-reused XXXX
Receiving objects: 100% (XXX/XXX), XX MiB | XX MiB/s, done.
Resolving deltas: 100% (XXX/XXX), done.

この進捗状況を非表示にする際には-qオプションを使用します。

$ git clone -q [リポジトリパス]

originに別名を付ける

リモートリポジトリからgit cloneをする場合、デフォルトのリポジトリ名であるoriginがクローンされます。

#オプション無しで実行した場合
git branch -a
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/feature/hogehoge

-oオプションを使用することで、origin以外の名前を指定することができます。
originとはリモートリポジトリのアクセス先に対してデフォルトで付く名称です。)

$ git clone -o [指定したいorigin以外の名前] [リポジトリパス]

確認すると、指定した名前でクローンできていることが分かります。

#オプション有りで実行した場合(例では「target」と呼称)
git branch -a
* main
  remotes/target/HEAD -> target/main
  remotes/target/feat/hogehoge

また、下記例のようにgit remoteコマンドでもアクセス先を確認することができます。

$ git remote -v

指定数のコミットのみを取得する

開発が進んでくるとgit cloneをするだけで、数分を要するようなリポジトリも出てくると思います。
特定のブランチを指定するオプションも先ほどご紹介しましたが、さらにコミット数を指定することも可能です。
過去分のコミットが不要な場合は、このオプションを使用することで軽量にクローンすることができます。

$ git clone --depth=1 [リポジトリパス] [ブランチ名]

例では「1」を指定して、最新のコミットのみを取得対象としています。
ブランチを指定しない場合は、デフォルトブランチが取得対象となります。

チェックアウトを行わない

git cloneをデフォルトで実行すると自動的にチェックアウトが行われますが、チェックアウトを行わないことでクローン時のサイズを抑えることができます。

$ git clone --no-checkout [リポジトリパス]

チェックアウトが実行されないので、クローン後のディレクトリには.gitのみが作成されます。

$ ls -a
.   ..  .git

ちなみに、この空っぽの状態から特定のディレクトリをチェックアウトするには、sparse-checkoutコマンドを使用します。

$ git sparse-checkout init
$ git checkout
Your branch is up to date with 'origin/main'.

まとめ

Git入門ということで、git cloneコマンドの使い方と一部オプションをご紹介しました。
git cloneは開発初期に一度実行するきりで使用頻度はあまり高くないと思いますが、オプションを組み合わせることでローカルのサイズを抑えたりデフォルトでは実現できない特別な使い方が可能になるので、よろしかったら参考にしてください。


◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.