Git/GitHub/GitLabで遭遇する「リポジトリが存在しない」「アクセス権限エラー」の原因と詳細な解決策
ソフトウェア開発やプロジェクト管理において、GitやGitHub、GitLab、Bitbucketといったバージョン管理システムは不可欠です。これらのシステムを使うことで、コードの変更履歴を管理し、チームで効率的に共同作業を進めることができます。しかし、Gitコマンドを実行している最中に、「リポジトリが存在しない (Repository Not Found)」または「アクセス権限がない (Permission Denied / Authentication Failed)」といったエラーメッセージに遭遇することは珍しくありません。
これらのエラーは、多くの場合、比較的単純な原因に基づいています。しかし、その原因がどこにあるのか特定するのが難しく、多くの開発者が頭を悩ませることがあります。ネットワーク設定、認証情報、リポジトリURL、権限設定など、チェックすべき箇所が多岐にわたるためです。
この記事では、「リポジトリが存在しない」および「アクセス権限がない」という二つの主要なエラータイプに焦点を当て、それぞれのエラーがなぜ発生するのか、具体的なエラーメッセージの例、そしてそれらを解決するための詳細な手順とトラブルシューティング方法を網羅的に解説します。Git初心者の方から、より複雑な認証設定に直面している経験者の方まで、幅広い読者層がこれらのエラーに効果的に対処できるようになることを目指します。
1. エラーメッセージを理解する
問題解決の第一歩は、正確なエラーメッセージを理解することです。GitやGitホスティングサービスから返されるメッセージは、エラーの原因の手がかりを多く含んでいます。
遭遇する可能性のある代表的なエラーメッセージは以下の通りです。
「リポジトリが存在しない」系エラー:
fatal: repository 'https://github.com/user/nonexistent-repo.git' not found
fatal: repository '[email protected]:user/nonexistent-repo.git' not found
ERROR: Repository not found.
(SSH接続時やAPIなど)remote: Repository not found
[email protected]: Permission denied (publickey). fatal: Could not read from remote repository.
(SSH接続で「Repository not found」に起因する場合もある)
これらのメッセージは、「指定された場所に、要求された名前のリポジトリが見つかりませんでした」ということを直接的に示しています。原因としては、URLの入力ミス、リポジトリの削除、移動などが考えられます。
「アクセス権限がない」系エラー:
fatal: Authentication failed for 'https://github.com/user/private-repo.git'
remote: Permission to user/private-repo.git denied to another-user.
(SSH接続時)ERROR: Permission to user/private-repo.git denied to another-user.
(SSH接続時)You don't have permission to access this repository.
(Web UIなど)fatal: unable to access 'https://github.com/user/private-repo.git/': The requested URL returned error: 403
(HTTPS接続で認証失敗/権限なしの場合)fatal: unable to access 'https://github.com/user/private-repo.git/': The requested URL returned error: 401
(HTTPS接続で認証情報不足/無効の場合)
これらのメッセージは、「指定されたリポジトリは存在するが、あなた(または使用している認証情報)にはそれにアクセスする権限がありません」ということを示唆しています。原因としては、認証情報の誤りや不足、プライベートリポジトリへのアクセス権限の欠如などが考えられます。
SSH接続の場合、権限エラーが「Repository not found」と表示されることもあります。これは、認証に失敗した場合、サービス側がそのリポジトリの存在を匿名ユーザーに教えないようにしているセキュリティ上の理由によるものです。したがって、SSHで「Repository not found」と表示された場合は、認証の問題も疑う必要があります。
次に、これらのエラーの具体的な原因と、それぞれの詳細な解決策を見ていきましょう。
2. 「リポジトリが存在しない」エラーの原因と解決策 (Repository Not Found)
このタイプのエラーは、Gitがリモートリポジトリに接続しようとした際に、指定されたURLに対応するリポジトリが見つからなかった場合に発生します。
原因1:リポジトリURLの入力ミスまたは誤り
これが最も一般的な原因です。リポジトリのURLは非常に正確でなければなりません。
- タイポ(スペルミス): ユーザー名、組織名、リポジトリ名にスペルミスがある。
- 大文字・小文字の区別: GitやGitホスティングサービスによっては、リポジトリ名やユーザー名の大文字・小文字を区別します。特にファイルシステムが大文字・小文字を区別しないOS(例: WindowsやmacOSのデフォルト設定)で作業している場合、ローカルでは問題なくてもリモートで問題になることがあります。
- ユーザー名/組織名の誤り: URLに含まれるユーザー名や組織名が間違っている。
- リポジトリ名の誤り: リポジトリの実際の名前とURLが異なっている。
- プロトコルの誤り: HTTPS (
https://...
) と SSH (git@...
) のURL形式を混同している。 .git
の有無: クローンやリモート追加時には通常.git
がつきますが、Webブラウザで見るURLにはつきません。混同している可能性があります。
解決策1:リポジトリURLを徹底的に確認・修正する
-
公式ページでURLを確認する: Gitホスティングサービス(GitHub, GitLabなど)のWebサイトを開き、対象のリポジトリページにアクセスします。そこに表示されている「Clone」または「Code」ボタンをクリックして、公式に提供されているURLをコピーします。HTTPSとSSHの両方のURLが提供されているはずなので、使用したいプロトコルのURLを正確にコピーします。
- 例 (GitHub):
- HTTPS:
https://github.com/ユーザー名または組織名/リポジトリ名.git
- SSH:
[email protected]:ユーザー名または組織名/リポジトリ名.git
- HTTPS:
- 例 (GitHub):
-
コピーしたURLと使用しているURLを比較する: Gitコマンドで入力したURLや、ローカルリポジトリの
.git/config
ファイルに設定されているリモートURLと比較します。一文字ずつ慎重に確認してください。- ローカルリポジトリのリモートURLを確認するには、以下のコマンドを実行します。
bash
git remote -v
出力例:
origin https://github.com/user/repo.git (fetch)
origin https://github.com/user/repo.git (push)
または
origin [email protected]:user/repo.git (fetch)
origin [email protected]:user/repo.git (push)
- ローカルリポジトリのリモートURLを確認するには、以下のコマンドを実行します。
-
URLを修正する: URLに間違いがあれば、修正してコマンドを再実行します。
git clone
の場合、正しいURLでクローンし直します。- 既にローカルリポジトリがある場合、リモートURLを修正します。
bash
# 現在のリモート名が origin の場合
git remote set-url origin 正しいリポジトリURL
または、直接.git/config
ファイルを編集することも可能です。
-
WebブラウザでURLにアクセスしてみる: 公開リポジトリであれば、Gitコマンドで使用しようとしているHTTPS URLをWebブラウザのアドレスバーに入力してアクセスしてみます。リポジトリのページが表示されれば、少なくともURL自体は正しい可能性が高いです。表示されない、または404エラーになる場合は、URLが間違っているか、リポジトリが公開されていないかのどちらかです。
原因2:リポジトリが削除された、移動した、または存在しない
対象のリポジトリが、何らかの理由でリモートから消滅しているか、別の場所に移動している可能性があります。
- 共同作業者や管理者が削除した: チームメンバーやリポジトリの管理者が、意図せずまたは意図的にリポジトリを削除した。
- リポジトリが移動した: リポジトリが別のユーザーアカウントや組織に移管された。サービスによっては、古いURLから新しいURLへ自動的にリダイレクトされない場合があります。
- 最初から存在しないリポジトリを参照しようとしている: コマンドの入力ミスだけでなく、そもそも存在しないリポジトリ名を指定している。
解決策2:リポジトリの存在と場所を確認する
- 関係者に確認する: 共同作業者やリポジトリの管理者に、リポジトリが削除されたり移動したりしていないか確認します。
- Webサイトで検索する: GitホスティングサービスのWebサイトで、リポジトリ名や関連するキーワードで検索し、リポジトリが別の場所(ユーザー/組織)に移動していないか探します。
- ユーザー/組織のページを確認する: リポジトリがあるはずのユーザーアカウントまたは組織のページに直接アクセスし、リポジトリリストの中に目的のリポジトリが存在するか確認します。
- リポジトリが本当に存在するか再確認する: もしかしたら、存在しないリポジトリ名を想定で入力してしまっているかもしれません。もう一度、クローンしようとしているリポジトリの名前と場所(ユーザー/組織)を正確に確認します。
原因3:ネットワークの問題(ただし「リポジトリが存在しない」と表示されることは稀)
ネットワーク接続に問題がある場合、Gitはリモートホストに到達できません。通常、この場合は「Could not resolve hostname」やタイムアウトといったネットワークエラーとして表示されますが、稀に適切に処理されず「Repository not found」のように誤認される可能性もゼロではありません。
解決策3:ネットワーク接続を確認する
- インターネット接続を確認する: コンピュータがインターネットに接続されているか確認します。
- Gitホスティングサービスへの接続を確認する: 対象のGitホスティングサービス(github.com, gitlab.comなど)にpingコマンドを実行して応答があるか確認します。
bash
ping github.com - ファイアウォールやプロキシの設定を確認する: 企業内ネットワークなど、ファイアウォールやプロキシを経由している環境の場合、Git通信がブロックされていないかシステム管理者に確認します。
- DNS設定を確認する: ホスト名の解決に問題がないか確認します。DNSキャッシュをクリアすることも有効な場合があります。
3. 「アクセス権限エラー」の原因と解決策 (Permission Denied / Authentication Failed)
このタイプのエラーは、指定されたリポジトリはリモートに存在するものの、Gitがそのリポジトリにアクセスするための認証に失敗したり、認証は成功したがその認証情報(ユーザー/キー)にアクセス権限が付与されていなかったりする場合に発生します。
原因1:認証情報の誤りまたは不足
リモートリポジトリがプライベートである場合、アクセスするには適切な認証情報が必要です。HTTPS接続とSSH接続では認証方法が異なります。
HTTPS接続の場合:
- パスワード認証の廃止: 多くのGitホスティングサービス(GitHubなど)では、セキュリティ上の理由からユーザー名とパスワードによる認証が非推奨または完全に廃止されています。代わりにパーソナルアクセストークン (PAT) の使用が推奨されています。
- パーソナルアクセストークン (PAT) の問題:
- PATが正しく入力されていない(コピー&ペーストミスなど)。
- PATの有効期限が切れている。
- PATに必要なスコープ(権限)が付与されていない(例: リポジトリへの読み取り/書き込み権限がない)。
- PATがサービス側で削除されている。
- Credential Helperの問題: Gitは認証情報をキャッシュするためにCredential Helperを使用します。このキャッシュされた情報が古い、間違っている、または無効になっている可能性があります。
- ユーザー名またはパスワードの誤り: (パスワード認証が可能な場合)ユーザー名またはパスワードを間違えている。
SSH接続の場合:
- SSHキーペアが正しく設定されていない:
- 公開鍵 (
id_rsa.pub
など) をGitホスティングサービスのアカウント設定に登録していない。 - サービスに登録している公開鍵に対応する秘密鍵 (
id_rsa
など) を使用していない。
- 公開鍵 (
- 秘密鍵のパスフレーズの誤り: 秘密鍵にパスフレーズを設定している場合、入力が間違っている。
- 複数のSSHキーがある場合の設定ミス: 複数のSSHキーを使い分けている場合、SSHクライアントが対象ホストに対して正しい秘密鍵を選択できていない(
~/.ssh/config
ファイルの設定ミスなど)。 - SSHキーファイルのパーミッション問題: 秘密鍵ファイル (
id_rsa
など) のパーミッションが適切でない(通常は所有者のみ読み書き可能な600
)。公開鍵ファイル (id_rsa.pub
など) はもう少し緩くても問題ないことが多いですが、秘密鍵は厳重な権限が必要です。 - SSHエージェントにキーが登録されていない: SSHエージェントを使用している場合、秘密鍵がエージェントに追加されていない。
解決策1:認証情報を確認・修正する
これは原因が多岐にわたるため、プロトコルごとに詳細に解説します。
HTTPS接続の場合の解決策:
-
パーソナルアクセストークン (PAT) を使用しているか確認する:
- GitHubなど、多くのサービスでパスワード認証は非推奨/廃止されています。PATを使用しているか確認し、使用していない場合はPATを設定することを強く推奨します。
- PATの生成手順 (GitHubの例):
- GitHubのWebサイトにログインします。
- 右上のプロフィール画像をクリックし、「Settings」を選択します。
- 左側のナビゲーションメニューで「Developer settings」を選択します。
- さらに「Personal access tokens」→「Tokens (classic)」または「Fine-grained tokens」を選択します。(Fine-grained tokensが新しい推奨方式ですが、classicの方がシンプルです。)
- 「Generate new token」をクリックします。
- トークンに分かりやすい名前をつけます。
- 有効期限を設定します(無期限は非推奨)。
- 最も重要: 必要なスコープ(権限)を選択します。リポジトリをクローン/プル/プッシュするには、通常
repo
スコープ(またはFine-grained tokensの場合はリポジトリに対する読み取り/書き込み権限)が必要です。必要な操作に応じたスコープを選択してください。 - 「Generate token」をクリックします。
- 生成されたトークン文字列をコピーします! この文字列は一度しか表示されないため、必ず安全な場所に控えてください。
- 他のサービス(GitLab, Bitbucketなど)でも同様にアクセストークンやApp Passwordを生成する機能があります。それぞれのドキュメントを参照してください。
-
Credential Helperの設定を確認し、必要ならクリアする: GitはCredential Helperを使って認証情報をキャッシュします。古い、または間違ったPATがキャッシュされている可能性があります。
- Credential Helperの種類を確認します。
bash
git config --global credential.helper
出力例:manager
,osxkeychain
,store
,cache
など。 - キャッシュをクリアする(Credential Helperの種類によって異なります)。
manager
,osxkeychain
などGUIベースの場合: OSの認証情報マネージャーを開いて、対象のホスト(github.comなど)に関連する情報を削除します。cache
の場合:git credential-cache exit
でキャッシュデーモンを終了させます。store
の場合:~/.git-credentials
ファイルを開いて、対象のホストに関する行を削除します。
- キャッシュクリア後、Gitコマンド(例:
git pull
,git push
)を実行すると、新しい認証情報(PAT)の入力を求められるはずです。正確なPATを入力してください。
- Credential Helperの種類を確認します。
-
正しいPATで再認証する: クローンやプッシュなどの操作時に、PATの入力を求められたら、生成した正確なPATをコピー&ペーストで入力します。
-
Git設定のリモートURLを確認する:
.git/config
に設定されているリモートURLが、HTTPS形式であり、かつ正確であることを確認します。
SSH接続の場合の解決策:
-
SSHキーペアが存在するか確認する: ターミナルを開き、ユーザーのホームディレクトリにある
.ssh
ディレクトリの内容を確認します。
bash
ls -l ~/.ssh/
通常、id_rsa
(秘密鍵) とid_rsa.pub
(公開鍵) のようなファイルが存在するはずです。(他の名前の場合もあります)- ファイルがない場合、SSHキーペアを生成する必要があります。
bash
ssh-keygen -t rsa -b 4096 -C "[email protected]"
# 鍵を保存する場所を尋ねられるので、デフォルトのままEnter(~/.ssh/id_rsa)
# パスフレーズを設定するか尋ねられるので、必要に応じて設定(セキュリティ推奨)
# パスフレーズを再入力
- ファイルがない場合、SSHキーペアを生成する必要があります。
-
公開鍵 (
id_rsa.pub
) の内容を確認する:
bash
cat ~/.ssh/id_rsa.pub
出力されるssh-rsa AAAA...
で始まる文字列全体をコピーします。 -
公開鍵をGitホスティングサービスに登録する:
- サービスのWebサイトにログインします。
- アカウント設定を開き、「SSH and GPG keys」のような項目を探します。(サービスによって名称は異なります)
- 新しいSSHキーを追加するボタンをクリックします。
- キーに識別しやすいタイトルをつけます(例: “My Laptop SSH Key”)。
- 「Key」または「Public Key」のフィールドに、先ほどコピーした公開鍵の文字列全体を貼り付けます。
- キーを保存します。
-
SSH接続をテストする: 公開鍵を登録したら、以下のコマンドでSSH接続が成功するかテストします。
bash
ssh -T [email protected] # GitHubの場合
ssh -T [email protected] # GitLabの場合
ssh -T [email protected] # Bitbucketの場合
成功すれば、「Hi [ユーザー名]! You’ve successfully authenticated…」のようなメッセージが表示されるはずです。「Permission denied」と表示される場合は、まだ認証に問題があります。 -
秘密鍵のパスフレーズを確認する: SSH接続テストやGitコマンド実行時にパスフレーズを求められた場合、正確なパスフレーズを入力します。忘れた場合は、キーペアを再生成する必要があります(セキュリティ上の理由から、パスフレーズを復旧する方法はありません)。
-
SSHエージェントにキーを追加する: パスフレーズの入力を省略したい場合や、複数のキーを使っている場合は、SSHエージェントに秘密鍵を追加します。
bash
eval "$(ssh-agent -s)" # エージェントを起動(既に起動していれば不要)
ssh-add ~/.ssh/id_rsa # 秘密鍵を追加。パスフレーズを求められる
ssh-add -l
で登録されているキーを確認できます。 -
~/.ssh/config
ファイルを確認・設定する: 複数のキーを使い分けている場合や、デフォルト以外の名前/場所の秘密鍵を使用している場合は、このファイルで設定します。- ファイルが存在しない場合は新規作成します。
-
以下の形式でエントリを追加します。
“`ini
Host github.com
Hostname github.com
User git
IdentityFile ~/.ssh/id_rsa # 使用したい秘密鍵ファイルのパスを指定Host gitlab.com
Hostname gitlab.com
User git
IdentityFile ~/.ssh/another_key # 別のキーを使いたい場合
``
[email protected]:…
これで、の形式のURLを使う際に、指定した秘密鍵が使われるようになります。
IdentityFile` のパスは正確に指定してください。
-
秘密鍵ファイルのパーミッションを修正する: 秘密鍵ファイル(例:
~/.ssh/id_rsa
)のパーミッションが所有者のみ読み書き (600
) になっているか確認します。
bash
ls -l ~/.ssh/id_rsa
# -rw------- 1 your_user your_group ... ~/.ssh/id_rsa のようになっているのが理想
パーミッションが緩すぎる場合(例:644
,660
,777
など)、SSHクライアントはセキュリティ上の理由からその秘密鍵の使用を拒否します。以下のコマンドで修正できます。
bash
chmod 600 ~/.ssh/id_rsa
公開鍵ファイル (~/.ssh/id_rsa.pub
) は644
でも問題ありませんが、600
でも構いません。 -
Git設定のリモートURLを確認する: ローカルリポジトリの
.git/config
に設定されているリモートURLが、SSH形式であり、かつ正確であることを確認します。
原因2:使用しているユーザー/キーにリポジトリへのアクセス権限がない
認証は成功したが、その認証情報(ログインユーザーや使用しているSSHキー)に関連付けられたアカウントに、対象のリポジトリへのアクセス権限が付与されていない。
- プライベートリポジトリである: アクセスしようとしているリポジトリがプライベート設定になっており、あなたのアカウントが共同作業者として追加されていないか、所属する組織のチームに権限が付与されていない。
- 共同作業者として追加されていない: リポジトリのオーナーが、あなたのアカウントを共同作業者として追加するのを忘れている、または意図的に追加していない。
- 組織のリポジトリにおけるチーム権限の設定ミス: 組織に所属しており、その組織内のリポジトリにアクセスしようとしているが、あなたのアカウントが所属するチームにそのリポジトリに対する適切な権限(読み取り、書き込み、管理者など)が付与されていない。
- リポジトリがFork元から権限を継承しない設定になっている: (一部サービス)Forkされたリポジトリが、Fork元のプライベートリポジトリへのアクセス権限を自動的に継承しない設定になっている。
- リポジトリが別のユーザー/組織に移動し、権限がリセットされた: リポジトリが移管された際に、共同作業者やチームの権限設定が引き継がれなかった。
解決策2:リポジトリのアクセス権限を確認・付与してもらう
- リポジトリがプライベートであるか確認する: Webブラウザでリポジトリのページにアクセスし、公開設定になっているか(通常「Public」や地球マークが表示されている)プライベート設定になっているか(通常「Private」や鍵マークが表示されている)を確認します。パブリックリポジトリであれば認証なしでクローンできるはずなので、権限エラーが出ているならプライベートである可能性が高いです。
- リポジトリのオーナーまたは管理者に連絡する: 対象のリポジトリのオーナーまたは管理者に連絡し、あなたのアカウントにリポジトリへのアクセス権限(通常は読み取りまたは書き込み)を付与してもらうように依頼します。この際、あなたのアカウントのユーザー名(GitHubなど)または、SSHアクセスを希望する場合は公開鍵の内容を伝える必要があります。
- 自分がオーナー/管理者である場合、権限設定を確認・修正する:
- 共同作業者の追加: リポジトリ設定を開き、「Manage access」や「Collaborators」のような項目を探します。そこから、アクセスを許可したいユーザーを共同作業者として追加し、適切な権限(読み取り、書き込み、管理者)を付与します。
- チームへの権限付与 (組織の場合): 組織設定またはリポジトリ設定で、リポジトリに対するチームのアクセス権限設定を確認します。対象のチームに、そのリポジトリへの適切な権限が付与されているか確認し、必要であれば追加または修正します。あなたのアカウントがそのチームに所属しているかも確認します。
- 正しいアカウントで操作しているか確認する: 複数のアカウントを持っている場合、現在Git操作を行っているのが、アクセス権限が付与されているアカウントであるか確認します。特にコマンドラインでの操作は、Webブラウザでログインしているアカウントとは独立している場合があります。
原因3:二段階認証 (2FA) の問題
二段階認証を設定している場合、従来のパスワード認証などがブロックされることがあります。
- パスワード認証と2FA: ユーザー名とパスワードによる認証が有効でも、二段階認証が有効なアカウントでは、パスワードだけでは認証が成功せず、さらに2FAコードが必要になります。Gitコマンドラインでは通常、この2FAコードの入力プロセスを直接サポートしていません。
- PATと2FA: PATを生成する際に、二段階認証をクリアしていない、またはPAT自体に必要な権限(2FAが必要な操作を含むスコープ)が付与されていない。
解決策3:二段階認証に関する設定を確認・調整する
- PATを使用しているか確認する: 二段階認証が有効なアカウントでコマンドラインからアクセスする場合、PATを使用するのが最も一般的で推奨される方法です。
- PATを生成する際に2FAをクリアする: サービスによっては、PATを生成する際に二段階認証コードの入力を求められることがあります。指示に従って正確に入力します。
- PATに必要なスコープが付与されているか確認する: PATが、実行したい操作(クローン、プッシュなど)に必要なスコープを持っているか確認します。特に、二段階認証が必要な操作(例: 組織設定の変更など高度な操作)を行う場合は、PATに適切なスコープが必要になりますが、通常のリポジトリ操作であれば
repo
スコープなどで十分です。 - SSH接続を使用する: SSH接続は、公開鍵認証自体が強力な認証手段であり、アカウントの二段階認証設定とは独立して機能することが多いです。HTTPSでの認証問題が解決しない場合、SSH接続に切り替えることを検討します。この場合、SSHキーの登録が正しく行われている必要があります(原因1、解決策1を参照)。
原因4:組織のセキュリティポリシーや特殊な設定
企業や組織によっては、追加のセキュリティポリシーや設定が適用されている場合があります。
- SAML SSO (Security Assertion Markup Language Single Sign-On): 組織がSAML SSOを必須にしている場合、Gitアクセスを行う前にSAML SSOプロバイダー経由での認証が必要になります。
- IPアドレス制限: 特定の信頼されたIPアドレスからのアクセスのみを許可している。
- SSHキーフィンガープリントの制限: 特定のSSHキーフィンガープリントを持つキーのみを許可している。
- 許可されたGitクライアントの制限: 特定のバージョンのGitクライアントのみを許可している。
解決策4:組織の管理者に問い合わせる
- 組織のIT部門またはGitリポジトリ管理者に連絡する: 組織内でこれらのエラーに遭遇した場合、個人の設定だけでなく、組織全体に適用されているセキュリティポリシーや特殊な設定が原因である可能性があります。
- SAML SSOの手順に従う: SAML SSOが必須の場合、組織が定めた手順に従って認証を行います。多くの場合、一度Webブラウザで組織のSAML SSOを経由してGitホスティングサービスにサインインした後、Gitコマンドが機能するようになります(セッションが確立されるため)。PATを生成する際にもSAML SSOが必要になる場合があります。
- IPアドレスやその他の制限について確認する: 現在使用しているネットワーク環境(IPアドレス)がアクセスを許可されているか確認します。また、SSHキーのフィンガープリント制限など、特定の制約がないか管理者に問い合わせます。
4. トラブルシューティングの体系的な手順
エラーメッセージの原因を特定し、解決策を適用するためには、体系的な手順で問題を切り分けることが重要です。
- エラーメッセージを正確に読む: まず、表示されたエラーメッセージの全文をコピー&ペーストして保存します。メッセージに含まれるキーワード(
not found
,Permission denied
,Authentication failed
, エラーコード401
,403
など)や、対象のリポジトリURL、プロトコル(https://
かgit@
か)を確認します。 - プロトコルを確認する: 使用しているプロトコルがHTTPS (
https://...
) かSSH (git@...
) かを確認します。原因と解決策が大きく異なるため、これは最も重要な切り分けです。git remote -v
コマンドで確認できます。 - リポジトリURLを検証する:
- Webブラウザでリポジトリの公式ページを開き、そこに表示されているURLと使用しているURLを比較します。一文字一句、タイポがないか確認します。
- 特にHTTPS/SSHの形式、ユーザー名/組織名、リポジトリ名が正確か確認します。
- パブリックリポジトリの場合、HTTPS URLをWebブラウザで開けるか試します。開けないなら、URL自体が間違っているか、リポジトリがパブリックではない可能性があります。
- 「Repository Not Found」の場合:
- URLの入力ミスが最優先のチェック項目です。コピー&ペーストではなく、公式URLを手入力して間違えることもよくあります。
- リポジトリが削除または移動されていないか、共同作業者や管理者に確認します。
- 「Permission Denied」または「Authentication Failed」の場合:
- HTTPSの場合:
- PATを使用しているか? 有効期限は? スコープは? 正確なPATを使っているか?
- Credential Helperに古い情報がキャッシュされていないか? キャッシュをクリアして再試行します。
- 二段階認証を設定しているか? PAT以外の認証方法(パスワードなど)を試みていないか?
- SSHの場合:
- SSHキーペアは存在する (
ls ~/.ssh/
)? 公開鍵はGitホスティングサービスに登録した (cat ~/.ssh/id_rsa.pub
の内容をWeb UIで確認)? - 秘密鍵ファイルのパーミッションは
600
か (chmod 600 ~/.ssh/id_rsa
)? - パスフレーズを正しく入力しているか?
~/.ssh/config
の設定は正しいか?IdentityFile
は正確な秘密鍵を指定しているか?ssh -T git@hostname
コマンドでSSH接続自体が成功するかテストする。ssh -v git@hostname
で詳細なSSH接続ログを確認し、どのキーで認証を試みているか、認証がなぜ失敗しているかなどの情報を得る。
- SSHキーペアは存在する (
- HTTPS/SSH共通:
- 使用しているユーザーアカウントに、対象リポジトリへのアクセス権限(共同作業者、チーム権限など)が付与されているか、リポジトリのオーナー/管理者に確認します。
- 複数のアカウントを持っている場合、正しいアカウントで操作しているか確認します。
- 組織のポリシー(SAML SSO, IP制限など)が影響していないか確認します。
- HTTPSの場合:
- 別のリポジトリや別の操作で試す: 同じリモートホスト(github.comなど)にある別のパブリックリポジトリをクローンしてみる(例:
git clone https://github.com/github/testrepo.git
)。これが成功すれば、ネットワークや基本的なGit設定、認証方法は問題なく、特定のリポジトリか特定のアカウント、特定の設定に問題がある可能性が高まります。逆にこれも失敗する場合、ローカルのGit設定、SSH設定、認証情報、またはネットワーク環境全体に問題がある可能性があります。 - Gitの詳細ログを取得する: Gitコマンドに
-v
オプションを付けたり、環境変数GIT_TRACE=1
を設定したりして、詳細な実行ログを出力させます。これにより、GitがどのようなURLにアクセスしようとしているか、認証プロセスで何が起きているかなどのデバッグ情報が得られます。
bash
GIT_TRACE=1 git clone https://github.com/user/repo.git - サービス側のログを確認する (管理者権限がある場合): Gitホスティングサービス側で、アクセスログや監査ログを確認できる場合があります。これにより、どのユーザーが、どのような認証情報で、どのリポジトリにアクセスしようとして、なぜ失敗したのかといった、より正確な情報を得られることがあります。
- キャッシュをクリアする: DNSキャッシュ、SSHエージェントのキャッシュ、Git Credential Helperのキャッシュなど、認証や接続に関連する可能性のあるキャッシュをクリアして再試行します。
- 公式ドキュメントやコミュニティを検索する: エラーメッセージの全文で検索したり、使用しているサービス名とエラー内容で検索したりして、同様の問題に遭遇した他のユーザーの情報や公式ドキュメントのトラブルシューティングガイドを参照します。
- 管理者に問い合わせる: 上記の手順で解決しない場合、特に組織内のリポジトリに関する問題であれば、組織のGitホスティングサービスの管理者やIT部門に問い合わせるのが最も確実です。
5. 予防策
これらのエラーに遭遇する可能性を減らすために、日頃から以下の点に注意することが重要です。
- リポジトリURLは正確にコピー&ペーストする: 手入力はタイポの原因になりやすいです。公式ページからURLをコピーして使用しましょう。
- HTTPS接続ではPATを使用し、有効期限を管理する: パスワード認証は非推奨であり、セキュリティリスクも高いため、PATに切り替えます。生成したPATは安全な場所に保管し、有効期限が切れる前に更新する習慣をつけます。
- SSH接続ではSSHキーペアを適切に管理する: SSHキーペアは大切に保管し、秘密鍵のパーミッションは厳重にします。公開鍵はGitホスティングサービスのアカウントに忘れずに登録します。複数のキーを使い分ける場合は
~/.ssh/config
を適切に設定します。 - 共同作業者とリポジトリ情報を共有する: チームで作業する場合、リポジトリの正確なURL、使用するプロトコル、アクセス権限についてメンバー間で明確に共有します。
- Git設定を確認する習慣をつける:
git remote -v
やgit config --list
コマンドを使って、現在のリポジトリ設定やGit全体の認証設定を時々確認します。 - 重要なリポジトリは必要に応じてバックアップを取得する: 万が一、リモートリポジトリが削除された場合でも、ローカルリポジトリや他のバックアップがあれば復旧が容易になります。
6. まとめ
「リポジトリが存在しない」および「アクセス権限エラー」は、Gitを使った開発で頻繁に遭遇するエラーです。これらのエラーは、見た目は似ていても原因は大きく異なる場合があります。
「リポジトリが存在しない」エラーは、主にリポジトリURLの入力ミスや、リポジトリ自体の削除/移動によって発生します。解決策としては、まずリポジトリURLの正確性を徹底的に確認し、必要であればリポジトリの存在を関係者に確認することが重要です。
一方、「アクセス権限エラー」は、リモートリポジトリは存在するものの、アクセスするための認証情報が誤っているか不足している、または認証は成功したがそのアカウントにリポジトリへのアクセス権限が付与されていない場合に発生します。HTTPSとSSHで認証メカニズムが異なるため、それぞれのプロトコルに応じた認証情報(PATやSSHキー)と権限設定を確認・修正する必要があります。組織特有のセキュリティポリシーも考慮に入れる必要があります。
これらのエラーに遭遇した際は、慌てずにエラーメッセージを正確に読み取り、本記事で解説した原因と解決策を参考に、体系的なトラブルシューティングの手順で問題を切り分けてください。多くの場合、基本的な設定や認証情報の確認・修正で解決できます。日頃から認証情報やリポジトリ設定を適切に管理することで、これらのエラーに遭遇するリスクを減らし、スムーズな開発ワークフローを維持することができます。