Git
git clone

git cloneコマンド:github ssh設定、-branch、-depthオプション

この記事では git clone コマンドの使い方を説明します。ここでは、ssh でのクローン、--branch オプション、--depth オプションについて簡単に説明します。

1. git clone の使い方

git clone コマンドは、リモートリポジトリの内容全体をローカル環境にコピーします。クローンしたリポジトリに新しい変更をコミットしたり、別の操作を行ったりして、リモートリポジトリにプッシュし直します。

クローンの作成は、GithubやGitlab、BitbucketなどのGitホスティングサービスで行うのが一般的です。使い方は簡単です。リモートリポジトリのアドレスを取得し、以下のコマンドを入力します。

git remote post で説明したように、Git はさまざまな通信プロトコルをサポートしています。最もポピュラーなプロトコルである HTTP(S) プロトコルを例に見てみましょう。

$ git clone https://github.com/user/repo.git

また、git init post--bare オプションについて説明したように、リモートリポジトリのアドレスの末尾が .git であることにもお気づきでしょう。

コマンドを実行すると、カレントディレクトリにリポジトリと同じ名前のフォルダが作成され、その中にリポジトリのファイルがダウンロードされます。世界で一番星の数が多い Github リポジトリのアドレスで git clone コマンドを実行した結果がこちらです。

git clone 実行結果](/images/git/clone/1.webp) リモートのレポ名である free-programming-books ディレクトリに、レポ内のすべてがコピーされていることがわかります。別の名前のディレクトリにコピーしたい場合は、次のようにアドレスに続けて希望のディレクトリ名を書きます。

$ git clone https://github.com/user/repo.git directory-name

2. sshを使ったクローン

SSHは、公開鍵と秘密鍵のペアを使った暗号化を提供する通信プロトコルです。主にリモートホストに接続するために使われます。Gitと一緒に使うと、httpsよりも認証が簡単でレスポンスが速くなるという利点があります。

Git がサポートしている通信プロトコルの一覧は、この投稿 を参照ください。

しかし、設定なしで使える HTTPS プロトコルとは異なり、SSH は初期設定が必要です。難しいことではないので、Github での ssh の使い方を順を追って見ていきましょう。

2.1. 新しいSSHキーを生成する

まず、新しいSSHキーを生成する必要がありますが、その前にすでに存在するかどうかを確認しましょう。以下のように~/.sshディレクトリをチェックする。

$ ls -al ~/.ssh
 

3つの出力ファイルがGithubで公開されている: id_rsa.pubid_ecdsa.pubid_ed26619.pubである。それらが存在しない場合は、以下のコマンドで新しいキーファイルを作成する。

$ ssh-keygen -t ed25519 -C "Github email"

これを実行した結果は次のようになります。

ssh-keygenでsshキーを生成

コマンドを入力すると、3つのプロンプトが表示されます。

最初のプロンプトはファイルの保存場所を尋ねるもので、何も入力せずに Enter キーを押すとデフォルトの場所に保存されます。 次のプロンプトは、sshのパスフレーズを入力するプロンプトです。これは、誰かがあなたのsshキーファイルを手に入れたとしても、それを使って好きなことができないようにするためのパスワードです。 次のプロンプトでもう一度入力する。

2.2. ssh 鍵を Github アカウントに登録する

作成したssh公開鍵をGithubに登録する必要があります。Githubにログイン後、右上のプロフィールをクリックしてメニューを開きます。Settingsをダブルクリックします。

Githubメニュー

設定画面で、アクセスメニューのSSHキーとGPGキーに移動します。

SSH鍵の追加メニュー

New SSH Key]ボタンをクリックし、登録画面を表示します。ssh鍵ファイルの内容は、以下のコマンドでクリップボードにコピーできます。

$ pbcopy < ~/.ssh/id_ed25519.pub

ED25519 アルゴリズムを使用していない場合は、適切なファイル名に置き換えてください。次に、クリップボードからコピーしたキーを下の「キー」セクションに貼り付け、緑色のボタンをクリックして新しい ssh キーを登録します。この時点で、アカウントを確認するために再度ログインするよう求められます。

sshキーの登録

登録が完了したら、以下のコマンドを実行して正常に登録されたことを確認します。

$ ssh -T git@github.com

この時点で、私のSSHキーファイルアルゴリズムに基づき、フィンガープリントが一致するかどうかをチェックし、接続を試みる。フィンガープリントは GitHubのSSH鍵指紋ページ (opens in a new tab)

Gitにssh

フィンガープリントを確認した後、yesとパスフレーズを入力すると、普通に接続できました。

git clone with ssh

これで初期設定は完了だ。以下のように git clone コマンドとリモートリポジトリの ssh アドレスを入力してクローンを進めます。

$ git clone git@github.com:<username>/<remote-repo-name>

以下が実行結果です。

ssh git clone 実行結果

毎回パスフレーズを入力するのを避ける方法もあります。これについては別の記事で取り上げます。

3. --branch オプションを使った特定のブランチのクローン

デフォルトでは、git clone コマンドはリモートリポジトリのデフォルトブランチ (通常は master または main ブランチ) をクローンします。 別のブランチをクローンしたい場合は、2 つの方法があります。メインブランチをクローンした後で別のブランチをプルする方法と、clone コマンドのオプションに --branch を指定する方法です。

リモートリポジトリから複数のブランチにアクセスする必要がある場合は、最初の方法を使うべきです。なぜなら、--branch オプションでクローンを作成すると、他のブランチにアクセスできなくなるからです。

以下にその方法を示します。

$ git clone --branch <branch-name> <repo-address>

実際に試してみましょう。

git clone --branch

こうすることで、必要なブランチだけをクローンすることができます。

4. -depthオプションで、必要な分だけ履歴をクローンする

プロジェクトが大きくなるにつれて、Git リポジトリに保存されるデータ量も増えていきます。 コミット履歴もかなり長くなり、リポジトリの最初から現在までのすべてのデータを取得するのは非効率的な場合もあるでしょう。

このような場合に使用するのが --depth オプションです。このオプションで、ローカル環境にコピーするコミット数を、最後のコミットに基づいて指定することができます。 たとえば、深さを 1 だけ指定した場合は、最後のコミットのデータのみを取得します。

コマンドは次のようになります。

$ git clone --depth <depth> <repo-address>

実際に実行した結果を見てみましょう。

git clone --depth 実行結果](/images/git/clone/9.webp)

ご覧のとおり、depth オプションを設定してクローンしたので、git log コマンドには最後のコミットしか表示されません。

5. 結論

git clone コマンドは、自分のプロジェクトだけでなくさまざまなリポジトリにアクセスするために必須のコマンドです。 この記事が git clone コマンドをより理解し、使いこなすための助けになれば幸いです。

copyright for git clone

© 2023 All rights reserved.