Points & Lines

【SourceTree】「fatal: Authentication failed for … 」GitHubリポジトリにpushできなくて困った話。

SourceTreeでGitHubリポジトリにプッシュできない

環境 : SourceTree 4.2.4, Git 2.4

先に結論

解決法 : アクセストークンを使ってリポジトリをローカルにhttpsクローンし直してからリモートリポジトリにプッシュ

(以後は解決に至ったまでの記録)

SourceTreeを使ってコミット内容をGitHubのリモートリポジトリにプッシュしようとしたとき、エラーが発生した。

(エラーメッセージ)
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for …

GitHubのパスワード認証が 2021年の8月をもってサポートしなくなったというよく出くわすエラー(知っとるわい)

認証方式以前にそもそもSourceTreeにGitHubのアカウントを紐付ける設定とかをやっていなかったので、そちらを行うことにした。

補足しておくと今回のケースは、コマンドラインでGitHubからSSHクローンしてきたリポジトリを、あとからSourceTree上で開いて作業していた。

SourceTreeのGitHubアカウント設定とか

SourceTreeのアカウント設定を以下のように行った。

※ GitHubアカウントへはSSHキーペアが事前に設定済みである

GitHubアカウントのSSHキー設定の記事

新しいPCでGitHubアカウントのSSHキー設定を行ったときのメモ

メニューからファイル > 新規 > アカウントのタブを選択

ホストにGitHubを選択。
SSHキーにはGitHubアカウントへ紐づけている公開鍵の名前が記載されていることを確認。

真ん中にある「アカウントを接続」をクリックするとブラウザが開いて許可を求められるので、Sourcetree.appを開くを選択

保存して、GitHubアカウントの追加を確認

これでプッシュできるようになるはず。

だが、、

プッシュできない!

(再び同じエラー)

GitHub アクセストークンを使ってみる

SSHがダメなので、アクセストークン(Personal access token)での認証を試みることにした。
(コマンドラインならSSHで認証できて素直にプッシュできるのに…なぜだろう)

生成したアクセストークンをSourceTreeのアカウントの設定の際に使用するようにすればいけるだろう。

だが、これもうまくいかない…

いったん、SourceTreeからは離れて、新たにGitHubからトークンを利用したhttpsでローカルへクローンし直してみる。

git clone https://(控えておいたトークン値)@github.com/(ユーザ名)/(リポジトリ名).git

再びSourceTreeを開き、httpsクローンしたリポジトリを「既存のローカルリポジトリを追加」で開いて、コミットを追加しプッシュしてみる。

今度はエラーが出ることなく無事成功!

開発マシン上のローカルリポジトリは開発環境の設定等の都合上、元々作業していた場所をそのまま使用したかったので、
今回新たにトークンを使用してhttpsクローンしたリポジトリにある.gitディレクトリ(不可視ファイル)を元々、SourceTreeで開いていたリポジトリの方へ手動で上書きすることにした。

左:元々作業していたリポジトリ、右:新たにリモートからhttpsクローンし直したリポジトリ

無事、元々の作業リポジトリでもSourceTreeでプッシュできた。

若干、力技を使った感じが否めないのと、SourceTreeで※SSH認証が上手くいかない理由の追求、細かな検証ができていないが、
Gitの操作にSourceTreeを使用する場合はリモートリポジトリをクローンしてくるところからSourceTree上での操作で行うのが無難かもしれん。

※ 結局、Github連携設定は行なっていない

Follow me!

モバイルバージョンを終了