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.pub
、id_ecdsa.pub
、id_ed26619.pub
である。それらが存在しない場合は、以下のコマンドで新しいキーファイルを作成する。
$ ssh-keygen -t ed25519 -C "Github email"
これを実行した結果は次のようになります。
コマンドを入力すると、3つのプロンプトが表示されます。
最初のプロンプトはファイルの保存場所を尋ねるもので、何も入力せずに Enter キーを押すとデフォルトの場所に保存されます。 次のプロンプトは、sshのパスフレーズを入力するプロンプトです。これは、誰かがあなたのsshキーファイルを手に入れたとしても、それを使って好きなことができないようにするためのパスワードです。 次のプロンプトでもう一度入力する。
2.2. ssh 鍵を Github アカウントに登録する
作成したssh公開鍵をGithubに登録する必要があります。Githubにログイン後、右上のプロフィールをクリックしてメニューを開きます。Settingsをダブルクリックします。
設定画面で、アクセスメニューのSSHキーとGPGキーに移動します。
New SSH Key]ボタンをクリックし、登録画面を表示します。ssh鍵ファイルの内容は、以下のコマンドでクリップボードにコピーできます。
$ pbcopy < ~/.ssh/id_ed25519.pub
ED25519 アルゴリズムを使用していない場合は、適切なファイル名に置き換えてください。次に、クリップボードからコピーしたキーを下の「キー」セクションに貼り付け、緑色のボタンをクリックして新しい ssh キーを登録します。この時点で、アカウントを確認するために再度ログインするよう求められます。
登録が完了したら、以下のコマンドを実行して正常に登録されたことを確認します。
$ ssh -T git@github.com
この時点で、私のSSHキーファイルアルゴリズムに基づき、フィンガープリントが一致するかどうかをチェックし、接続を試みる。フィンガープリントは GitHubのSSH鍵指紋ページ (opens in a new tab)。
フィンガープリントを確認した後、yesとパスフレーズを入力すると、普通に接続できました。
git clone with ssh
これで初期設定は完了だ。以下のように git clone
コマンドとリモートリポジトリの ssh アドレスを入力してクローンを進めます。
$ git clone git@github.com:<username>/<remote-repo-name>
以下が実行結果です。
毎回パスフレーズを入力するのを避ける方法もあります。これについては別の記事で取り上げます。
3. --branch オプションを使った特定のブランチのクローン
デフォルトでは、git clone
コマンドはリモートリポジトリのデフォルトブランチ (通常は master
または main
ブランチ) をクローンします。
別のブランチをクローンしたい場合は、2 つの方法があります。メインブランチをクローンした後で別のブランチをプルする方法と、clone コマンドのオプションに --branch
を指定する方法です。
リモートリポジトリから複数のブランチにアクセスする必要がある場合は、最初の方法を使うべきです。なぜなら、--branch
オプションでクローンを作成すると、他のブランチにアクセスできなくなるからです。
以下にその方法を示します。
$ git clone --branch <branch-name> <repo-address>
実際に試してみましょう。
こうすることで、必要なブランチだけをクローンすることができます。
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
コマンドをより理解し、使いこなすための助けになれば幸いです。
