SourcetreeでGitHubのプライベートリポジトリをクローンするとき、GitHubのアカウントパスワードは使えません。結論から書くと、GitHubでアクセストークン(Personal Access Token)を発行し、Sourcetreeにはパスワードの代わりにそのトークンを入力します。

GitHubは2021年8月13日に、Git操作でのパスワード認証の受け付けを終了しました。それ以降は、アクセストークン・OAuth・SSHキーのいずれかでしか認証できません。さらにSourcetreeのOAuth連携は公開リポジトリの読み取り権限しか要求しないため、OAuthで連携するとプライベートリポジトリが一覧に出てこないという問題があります。

この記事では、その回避策も含めて、Sourcetreeでプライベートリポジトリをクローンする手順を最後までまとめます。

なぜGitHubのパスワードではクローンできないのか

GitHubは2021年8月13日をもって、Git操作でのアカウントパスワード認証を廃止しました。現在、認証に使えるのは次の4つです。

  • Personal Access Token(アクセストークン)
  • OAuth トークン
  • SSHキー
  • GitHub App のインストールトークン

古い記事の手順どおりにパスワードを入力すると、Support for password authentication was removed on August 13, 2021.というエラーが返ってきます。このエラーが出たら、認証方法そのものを変える必要があるという合図です。

 

Sourcetreeのダウンロードとインストール

SourcetreeはAtlassianが提供している無料のGitクライアントです。macOS版とWindows版があり、どちらも公式サイトから入手します。

 

公式サイトからダウンロードする

公式サイトにアクセスして、使っているOS向けの最新バージョンをダウンロードします。

Sourcetree 公式サイト

 

インストールする

ダウンロードしたインストーラを実行し、画面の指示に従って進めます。初回起動時にAtlassianアカウントでのログインを求められますが、GitHubのリポジトリを扱うだけならスキップして構いません。

 

GitHubでアクセストークンを発行する

先にGitHub側でトークンを作ります。GitHubのアカウントが必要なので、持っていなければ先にGitHubで作成してください。

 

classicとfine-grainedはどちらを使うか

アクセストークンには2種類あります。特定のリポジトリだけをクローンしたいならfine-grained、細かく考えたくないならclassicです。

▼2種類のアクセストークンの違い

項目 classic fine-grained
権限の指定 scope(repo など広い単位) リポジトリごと・操作ごとに指定
対象リポジトリ そのユーザーがアクセスできる全て 選んだリポジトリのみ
有効期限 無期限にもできる 最長366日
発行できる数 制限なし 1ユーザーあたり50個まで
GitHubの推奨 こちらを推奨

権限が漏れたときの被害範囲が小さいのはfine-grainedです。特に業務のリポジトリを扱うなら、対象を絞れるこちらを選んでください。

 

トークンを発行する手順

GitHubの画面右上のアイコンから進みます。

  1. 「Settings」を開く
  2. 左メニューのいちばん下「Developer settings」を開く
  3. 「Personal access tokens」を開き、種類を選ぶ
  4. 「Generate new token」をクリックする
  5. 名前と有効期限を設定し、権限を指定する
  6. 発行されたトークンをコピーする

権限は、classicならrepoにチェックを入れます。ここにチェックが無いとプライベートリポジトリを読み書きできません。fine-grainedの場合は、対象リポジトリを選んだうえで「Contents」を「Read and write」にします。

発行されたトークンは、この画面を離れると二度と表示されません。閉じる前に必ずコピーしておいてください。紛失した場合は作り直しになります。

 

SourcetreeにGitHubアカウントを追加する

発行したトークンをSourcetreeに登録します。認証タイプは「OAuth」ではなく「Basic」を選ぶのがポイントです。

 

OAuthを選ぶとプライベートリポジトリが見えない

SourcetreeのOAuth連携は、GitHubに対して公開リポジトリの読み取り権限しか要求しません。そのため、OAuthで連携するとリポジトリ一覧にプライベートリポジトリが出てこず、書き込みもできません。

これはSourcetreeとGitHubの連携で長く知られている挙動です。プライベートリポジトリを扱うなら、Basic認証にユーザー名とアクセストークンを入れる方法が確実です。

 

Mac版の設定手順

メニューバーの「Sourcetree」→「設定」(バージョンによっては「環境設定」)を開き、「アカウント」タブから追加します。

  1. 「追加」ボタンをクリックする
  2. ホスティングサービスで「GitHub」を選ぶ
  3. 認証タイプで「Basic」を選ぶ
  4. ユーザー名にGitHubのユーザー名を入力する
  5. パスワード欄に、先ほど発行したアクセストークンを貼り付ける
  6. プロトコルは「HTTPS」を選ぶ

 

Windows版の設定手順

メニューバーの「ツール」→「オプション」を開き、「認証」タブから追加します。以降の入力内容はMac版と同じで、認証タイプに「Basic」を選び、パスワード欄にアクセストークンを貼り付けます。

 

プライベートリポジトリをクローンする

アカウントの登録が終われば、クローン自体はすぐ終わります。

 

リポジトリのURLをコピーする

GitHubでクローンしたいリポジトリを開き、緑色の「Code」ボタンから「HTTPS」のURLをコピーします。SSHキーを設定していない段階では、SSHのURLを選ばないよう注意してください。

 

Sourcetreeでクローンする

Sourcetreeのメニューから「ファイル」→「クローン / 新規作成」を選びます。

  1. 「元のパス / URL」にコピーしたURLを貼り付ける
  2. 保存先のローカルフォルダを指定する
  3. 「クローン」をクリックする

URLを貼り付けた時点で認証が通れば、リポジトリ名とブランチが自動で読み込まれます。ここで赤いエラーが出る場合は、認証がまだ通っていません。

 

クローンできないときの確認ポイント

つまずくのはほぼ認証まわりです。症状ごとに見るべき場所が違います。

▼症状と対処

症状 原因と対処
パスワード認証のエラーが出る パスワードを入力している。アクセストークンに置き換える
リポジトリ一覧に出てこない OAuthで連携している。Basic認証+トークンで登録し直す
読めるが push できない トークンの権限不足。classicならrepo、fine-grainedならContentsをRead and writeにする
急に認証が通らなくなった トークンの有効期限切れ。GitHubで再発行して登録し直す
古い認証情報が残っている Mac標準のキーチェーンアクセスでGitHubの項目を削除し、Sourcetreeを再起動する

いちばん多いのは、有効期限切れに気づいていないケースです。fine-grainedは最長366日なので、いつか必ず切れます。

 

SSHキーを使う方法もある

トークンの有効期限を管理したくないなら、SSHキーで認証する方法もあります。鍵を一度登録してしまえば期限切れがなく、複数リポジトリをまとめて扱えます。

手順としては、ローカルで鍵ペアを作り、公開鍵をGitHubの「Settings」→「SSH and GPG keys」に登録し、SourcetreeのアカウントでプロトコルにSSHを選びます。クローン時のURLも、HTTPSではなくSSHのものを使います。

鍵ファイルの形式を変換したい場面もあります。そのあたりはMacターミナルで鍵認証のpemとppkを相互変換するにまとめました。

なお、SourcetreeはGitHub以外のホスティングサービスにも同じ考え方で接続できます。AWS環境でGitを使う場合はSourcetreeとAWS CodeCommitを使用してソースコードを管理するを、クローンしたリポジトリからサーバーへ反映する流れはDockerで開発したLaravelのWebサイトをgitでXserverにデプロイするを参考にしてください。

▼HTML/CSS/JavaScriptの学習本を探している方はこちら

2023年版 Webコーディングにオススメの学習本【HTML/CSS/JavaScript】

ABOUT ME
りん
このブログでは、Web開発やプログラミングに関する情報を中心に、私が日々感じたことや学んだことをシェアしています。技術と生活の両方を楽しめるブログを目指して、日常で触れた出来事や本、グルメの話題も取り入れています。気軽に覗いて、少しでも役立つ情報や楽しいひとときを見つけてもらえたら嬉しいです。