GitHubのcloneについてまとめています。
GitHubでリポジトリをclone(クローン=複製)する
GitHubで公開されているリポジトリは、gitコマンドを使って、ローカルの開発環境に複製が可能です。複製の方法はいくつか用意されています。
git cloneでHTTPSを使ったクローン
gitコマンドを使い、通信はhttpsで暗号化してリポジトリをクローンします。GitHubの公式CLI、ghのリポジトリを複製してみましょう。
関連)cli/cli: GitHub’s official command line tool ghのリポジトリ
リポジトリのページにて、Codeボタンをクリックし、HTTPSの箇所に表示されるURLをクリップボードにコピー(選択して、Ctrl+C)します。
linuxなどのターミナルで、git cloneに続けてコピーしたURLをペーストします。(以下は、Ubuntu 20.04、bash環境の例)
$ git clone https://github.com/cli/cli.git Cloning into 'cli'... remote: Enumerating objects: 24951, done. remote: Counting objects: 100% (2187/2187), done. remote: Compressing objects: 100% (975/975), done. remote: Total 24951 (delta 1387), reused 1871 (delta 1191), pack-reused 2276 Receiving objects: 100% (24951/24951), 21.62 MiB | 4.75 MiB/s, done. Resolving deltas: 100% (16613/16613), done.
リポジトリがダウンロードされます。実行したディレクトリ以下にcliというディレクトリが作成され、ソースコードやメタファイルが複製されています。
$ cd cli $ ls LICENSE README.md cmd docs go.mod internal script utils Makefile api context git go.sum pkg test wix.json
git cloneでSSHを使ったクローン
同様にgit cloneで複製をおこないますが、通信の暗号化にSSHを使います。リポジトリのページにて、SSHの箇所に表示されるURLをコピーします。URLの右にあるアイコンをクリックすることで、クリップボードへURLがコピーされます。
SSHでクローンする場合、事前にSSHの公開鍵をGitHubに登録しておく必要があります。登録がない場合、以下のようなメッセージが表示され、クローンが失敗します。
$ git clone git@github.com:cli/cli.git Cloning into 'cli'... The authenticity of host 'github.com (52.192.72.89)' can't be established. RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'github.com,52.192.72.89' (RSA) to the list of known hosts. git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
鍵の生成やGitHubへの鍵の登録は、以下の記事を参照してください。
【関連記事】
▶GitHubにSSH接続する方法 秘密鍵・公開鍵生成と鍵の登録
SSH接続の準備完了後にクローンを実行すると、以下のようになります。
$ git clone git@github.com:cli/cli.git Cloning into 'cli'... Enter passphrase for key '/home/user1/.ssh/id_ed25519': remote: Enumerating objects: 24951, done. remote: Counting objects: 100% (2187/2187), done. remote: Compressing objects: 100% (977/977), done. remote: Total 24951 (delta 1387), reused 1874 (delta 1189), pack-reused 2276 Receiving objects: 100% (24951/24951), 21.62 MiB | 4.78 MiB/s, done. Resolving deltas: 100% (16613/16613), done.
ghコマンド(GitHubのCLI)でクローン
gitコマンドではなく、GitHubのCLIコマンドでリポジトリをクローンすることも可能です。リポジトリのページで、GitHub CLIの箇所にある文字列の右にあるアイコンをクリックし、クリップボードに文字列をコピーします。
コピーした文字列をそのままターミナルで実行します。ghコマンドのインストール方法については以下を参照してください。
【関連記事】
▶GitHubのCLI(コマンドラインインタフェース)はghコマンド プルリクエストやissue操作にも対応
認証が済んでいない状態で実行すると、以下のメッセージが出力されます。
$ gh repo clone cli/cli Welcome to GitHub CLI! To authenticate, please run `gh auth login`.
メッセージに従い、gh auth loginを実行した例。キーボードの矢印キーとEnterキーで選択肢を選び、認証トークンを登録します。
$ gh auth login ? What account do you want to log into? GitHub.com ? What is your preferred protocol for Git operations? HTTPS ? Authenticate Git with your GitHub credentials? Yes ? How would you like to authenticate GitHub CLI? Paste an authentication token Tip: you can generate a Personal Access Token here https://github.com/settings/tokens The minimum required scopes are 'repo', 'read:org', 'workflow'. ? Paste your authentication token:
あらためて、ghコマンドでcloneを実行します。
$ gh repo clone cli/cli Cloning into 'cli'... remote: Enumerating objects: 24951, done. remote: Counting objects: 100% (2187/2187), done. remote: Compressing objects: 100% (975/975), done. remote: Total 24951 (delta 1387), reused 1871 (delta 1191), pack-reused 2276 Receiving objects: 100% (24951/24951), 21.62 MiB | 4.64 MiB/s, done. Resolving deltas: 100% (16613/16613), done.
ghでクローンしても、gitでクローンしても複製される内容は変わりません。
GitHub Desktopでクローン
WindowsやMac環境のGUI、GitHub Desktopでクローンをおこないます。GitHub DesktopはPC環境でgit管理をおこなうのに便利なツールです。インストール方法は以下を参照してください。
【関連記事】
▶GitHub DesktopはWindows用Gitツール インストールと使い方の解説
リポジトリのページにて、Open with GitHub Desktopをクリックします。以下は、Windows 10で実行した例です。
「GitHubDesktop.exeを開きますか?」と表示されるので、「GitHubDesktop.exeを開く」ボタンをクリックします。
GitHub Desktopが起動し、リポジトリのクローンする画面が表示されます。Local path(クローン先のディレクトリ)を確認し、CloneをクリックするとPCにリポジトリが複製されます。
ZIPコードでクローン
PCやLinuxにgitコマンドなどをインストールしていない状態で、対象リポジトリのコードを見たい場合に有効です。ZIP形式で圧縮された状態でリポジトリの複製を取得できます。
リポジトリのページにて、Codeボタン→Download ZIPをクリックします。
Windowsの場合はダウンロードが実行されます。Linuxの場合はDownload ZIPの箇所で右クリック→リンクのアドレスをコピーしたあと、wgetコマンドでZIP形式でのリポジトリが取得できます。
$ wget https://github.com/cli/cli/archive/refs/heads/trunk.zip --2021-07-23 01:44:10-- https://github.com/cli/cli/archive/refs/heads/trunk.zip github.com (github.com) をDNSに問いあわせています... 52.192.72.89 github.com (github.com)|52.192.72.89|:443 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 302 Found 場所: https://codeload.github.com/cli/cli/zip/refs/heads/trunk [続く] --2021-07-23 01:44:10-- https://codeload.github.com/cli/cli/zip/refs/heads/trunk codeload.github.com (codeload.github.com) をDNSに問いあわせています... 52.68.31.213 codeload.github.com (codeload.github.com)|52.68.31.213|:443 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 特定できません [application/zip] `trunk.zip' に保存中 trunk.zip [ <=> ] 749.94K 2.82MB/s 時間 0.3s 2021-07-23 01:44:11 (2.82 MB/s) - `trunk.zip' へ保存終了 [767936]
lsで確認するとzipファイルがダウンロードされています。unzipで復元すると、各種ファイルが現れます。
$ ls trunk.zip $ unzip trunk.zip Archive: trunk.zip fa354a922b638863cb55ab310596414139c69a83 creating: cli-trunk/ extracting: cli-trunk/.gitattributes creating: cli-trunk/.github/ : : $ cd cli-trunk/ $ ls LICENSE README.md cmd docs go.mod internal script utils Makefile api context git go.sum pkg test wix.json
まとめ
- githubのcloneは、リポジトリのCodeボタンに表示される文字列で実行可能
- 通信の暗号化は、http やSSHが選択可能
- GitHubのCLIやGitHub Desktop、ZIP形式でのクローンも可能