原文: Git Clone Branch – How to Clone a Specific Branch
SVN や CVS のような比較的古い集中型のバージョンコントロールシステムとは異なり、Git は分散型です。完全な履歴とコードを操作する権限を、各開発者がローカルまたはリモートに持っています。また、必要に応じて、コードの複数の部分をどこからでも変更できます。
有名な Linux OS カーネルの作者である Linus Torvalds が、2005 年、Linux カーネルの開発用に Git を作成し、その後 Git は世界中でもっとも広く使われているモダンなバージョンコントロールシステムとなりました。
この記事では、Git clone と Git branch のワークフローを紹介し、必要に応じて特定のブランチを clone する方法を説明します。では始めましょう。
必要なもの
- ターミナルについての基礎知識
- ターミナルにコマンドを入力できること
- Git のインストール (以下でも説明します)
- GitHub のアカウント
- 笑顔で楽しんで取り組む姿勢
Git と GitHub の簡単な紹介
Wikipedia では下記のように説明されています。
Git(ギット)は、プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。
一方 GitHub は、Git を使用したバージョンコントロールのための、ウェブ上のホスティングサービスを指します。GitHub は、Git が持つ分散型バージョンコントロールとソースコード管理の全機能に加え、コンピューターコードのための追加機能も提供します。
Windows に Git をインストールする方法
最新の Git for Windows インストーラー をダウンロード、インストールしてください。
Linux に Git をインストールする方法
以下の中からあなたの Linux ディストリビューションに合わせてコマンドを実行してください。
Debian または Ubuntu
sudo apt-get update
sudo apt-get install git
Fedora
sudo dnf install git
CentOS
sudo yum install git
Arch Linux
sudo pacman -Sy git
Gentoo
sudo emerge --ask --verbose dev-vcs/git
Mac に Git をインストールする方法
最新の Git for Mac インストーラー をダウンロード、インストールしてください。
または下記のコマンドを実行してください。
brew install git
これで Git がインストールできました。ではチュートリアルに進みましょう。
Git クローン入門
Git を使うと、「リポジトリ」の中であなたのプロジェクトにバージョンを付けて管理できます。このリポジトリを GitHub のようなバージョンコントロール用のウェブベースホスティングサービスに保存します。
このリポジトリはあなたのローカルマシンにクローン (clone) することができ、すべてのファイルとブランチをローカルに持つことができます。(ブランチについては後ほど説明します。)

例えば、freeCodeCamp のリポジトリを SSH を使用して clone するには、次のコマンドを使用します。
git clone git@github.com:freeCodeCamp/freeCodeCamp.git
Git ブランチ入門
プロジェクトの作業中、さまざまな機能の開発をすることになります。そして複数のコントリビューターが、そのプロジェクトと各機能の作業をすることでしょう。
ブランチを使用すると、master
ブランチと同じファイルで自由に作業できる「プレイグラウンド (playground)」と呼ばれる環境を作ることができます。本番環境のコードを壊したり影響を与えることのないように、このブランチで、独立した機能を作成したり、新しい機能を試したり、破壊的な変更を行ったり、修正を行ったり、ドキュメントを書いたり、アイデアを試したりできます。作業が完了したらそのブランチを本番の master
ブランチにマージ (merge) します。
ブランチは Git の中核をなすコンセプトであり、GitHub でも 1 つのプロジェクトに異なるバージョンがあるワークフローの管理に使われています。master
ブランチは、そのリポジトリのデフォルトブランチで、「本番環境にデプロイ可能なコード」と見なされることが多いです。passwordless-auth
や refactor-signup-ux
のような新しいブランチは master
ブランチから作成できます。

Git ブランチをクローンする方法
リポジトリは git clone
コマンドでクローンすることができますが、このコマンドはブランチおよびリモートの HEAD
をクローンすることを覚えておいてください。これは通常、デフォルトの設定では master
ブランチとリポジトリ内の他のすべてのブランチを含みます。
つまり、リポジトリをクローンすると、master
と他すべてのブランチをクローンすることになります。これは、クローンした後あなた自身の操作で目的のブランチにチェックアウトしなければならないということです。
例えば、あるプロジェクトにおけるあなたのタスクがユーザーダッシュボードにパスワードレス認証を追加することだとしましょう。この機能が passwordless-auth
ブランチにあるとします。
この場合、あなたの "feature branch" は後で master
ブランチにマージされるので、今は master
ブランチは必ずしも必要ありません。では、「あなたが必要ないたくさんのファイル」がある他のブランチをフェッチ (fetch) せずにこの passwordless-auth
ブランチをクローンするにはどうしたらいいのでしょう。
この説明用に下記のサンプルリポジトリを作成しました。このリポジトリは Nextjs で作成されたシンプルなブログで、下記 4 つのダミーブランチがあります。
- master
- dev
- staging
- passwordless-auth
Nextjs では、pages/api
フォルダー内のすべてのファイルが /api/*
パスにマッピングされ、ページではなくAPIエンドポイントとして扱われます。このリポジトリではそれぞれのブランチに差異をつけるため、このディレクトリにダミーのAPIを作成しました。
master
ブランチには pages/api/hello.js というファイルがありますが、 passwordless-auth
ブランチには pages/api/auth.js というファイルがあります。それぞれのファイルはダミーテキストのレスポンスを返しています。こちらにある master
ブランチの hello API のレスポンスを見てみてください。(あなたへの挨拶のメッセージが入っているはずです。)
では、このリポジトリをクローンしてみましょう。
git clone git@github.com:BolajiAyodeji/nextjs-blog.git
これでこのリポジトリ内のすべてのブランチにアクセスできるようになり、簡単にブランチを切り替えてそれぞれのバージョンとファイルを見ることができるようになります。
git branch -a

remotes/origin/.. というブランチはどこから来たのか疑問に思いますか?
リポジトリをクローンする時、リモート (remote) と呼ばれる、インターネット上、あるいは社内のサーバーなどからリポジトリのデータをプル (pull) します。この origin という語は、リモートの URL を置き換える別名として Git が自動で作成したエイリアスです。(別のエイリアスを指定したり、変更することもできます。)
これらの remotes/origin/.. というブランチは、インターネット上からクローンした際の元リポジトリ (origin) を指しており、origin に対して pull、push などの操作を行うことができます。

つまり master
をあなたのマシンにクローンした場合、remotes/origin/master
はインターネット上の元の master
ブランチで、 master
があなたのローカルマシンにあるブランチになります。pull、push などの操作は remotes/origin/master
に向けて行います。
まとめると、remote はインターネット上のリポジトリを指す URL で、origin はこの remote URL のエイリアスです。

特定のブランチをクローンする方法
では、デモ用のリポジトリから特定のブランチをクローンしてみましょう。特定のブランチをクローンする方法は 2 つあります。以下いずれかの方法があります。
- リポジトリをクローンし、すべてのブランチをフェッチし、すぐ特定のブランチにチェックアウトする
- リポジトリをクローンし、1 つのブランチだけをフェッチする
方法その 1
git clone --branch <branchname> <remote-repo-url>
または
git clone -b <branchname> <remote-repo-url>
上記の -b は --branch のエイリアスです。
このコマンドにより、リポジトリ内のすべてのブランチをフェッチし、<branchname>
に指定したブランチにチェックアウトし、指定したブランチが、git push
と git pull
の設定がされたローカルブランチになります。しかしこのやり方では、まだ各ブランチから全てのファイルをフェッチしています。やりたいこととは少し違うようですね。
試してみましょう。
git clone -b passwordless-auth git@github.com:BolajiAyodeji/nextjs-blog.git
このコマンドにより、passwordless-auth
がローカルブランチに設定されますが、まだ他のブランチが追跡されています。


方法その 2
git clone --branch <branchname> --single-branch <remote-repo-url>
または
git clone -b <branchname> --single-branch <remote-repo-url>
上記の -b は --branch のエイリアスです。
このコマンドはほとんど方法その 1 と同じことを実行しますが、Git バージョン 1.7.10 以降で導入された --single-branch
オプションを使用しています。このオプションにより、他のブランチをフェッチせず、指定のブランチのファイルだけをフェッチすることができます。
試してみましょう。
git clone -b passwordless-auth --single-branch git@github.com:BolajiAyodeji/nextjs-blog.git
このコマンドにより passwordless-auth
がローカルブランチに設定され、このブランチだけを追跡している状態になります。


cd pages/api
コマンドを実行すると、前述した passwordless-auth
ブランチの auth.js
ファイルを見つけることができます。
結論
インターネットの帯域やストレージの空き容量が少ない中で、特定のブランチの作業をしたい状況もあるでしょう。他にもさまざまな理由で、ファイルを限定して特定のブランチをクローンしたいことがあるかもしれません。幸い、Git はそれを実現できる柔軟性を持っています。まずは肩ならしにこの記事で学んだことを試してみましょう。Git について学ぶことはまだまだあります。
ここから一つずつ学んでいきましょう。