Araoの技術ブログ

見習いエンジニアのAraoが、学んだことなどを書いたりするブログです。

権限がなくてGitHubにpushできなかった話

GitHubにpushしようとしたら、パーミッションに関するエラーメッセージが表示されてpushできなかった話です。
調べてみても解決方法がよく分からなかったので、数時間前の僕と同じエラーで困っている人のために書いてみます。
gitやGitHubに関しては初心者もいいところなので、書き方が変だったり言葉を誤って使用していたりするかもしれません。ご了承ください。

数週間前に、SSH公開鍵のGitHubへの登録を済ませ、Macのターミナルからお手軽にGitHubを使えるようになりました。その後、いろいろありまして、所属しているOrganizationのRepositoryに参加することになりました。
さっそくgit cloneして、コードをちょちょいと書き換え、addしてcommitしてpushしようとしたのですが、どうもpushができない。途中まで順調だったのに、なぜ?
というわけでエラーメッセージを読んでみます。

$ git push origin [branch name]
ERROR: Permission to [organization name]/[repository name].git denied to [user name].
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

何かとよく見かけるPermission deniedという文字列が観測されました。
きっと同じような理由ででつまずいている人がいるだろうという軽い気持ちで解決方法を調べてみたのですが、SSH周辺のトラブルに関する解決方法ばかりがヒットします。それも、pushでつまずいているのではなく、cloneのときにPermission deniedと言われているケースばかりです。先に書いた通り、git cloneは問題なく行えております。
念のため、SSH接続がちゃんとできているのか、確認してみました。

$ ssh -T git@github.com
Hi [user name]! You've successfully authenticated, but GitHub does not provide shell access.

バッチリですね。やはりSSH周辺のトラブルではないようです。
さて、解決方法が見つからない以上、自分で解決方法を模索する必要がでてきました。再度エラーメッセージを読んでみます。英語は不得手なので大雑把な理解になってしまいますが、「あなたが正しいアクセス権限を持っているか、リポジトリが存在しているか、確認してみてください」と言われているようです。
リポジトリはちゃんと存在しているので、あやしいのはアクセス権限です。pullはできるのにpushができないということは、Read onlyのような権限になっているのかもしれません。そこで、organizationに招待してくれた偉い人に確認してみることにしました。

僕「GitHubにpushができなくて、どうもアクセス権限周りがあやしいです。Read onlyの権限になっていないか、確認してみていただけますか」
偉い人「あれっ、ちょっと確認してみるね」

しばらくしたら、僕宛にGitHubから招待メールが届き、それを承諾してから再度GitHubから受け取ったメールには、You can now push to this repositoryなどと書かれておりました。
偉い人が何をどうしたのかはわかりませんが、これでpushができるようになったはずです。試してみましょう。

$ git push origin [branch name]
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 601 bytes | 0 bytes/s, done.
Total 4 (delta 3), reused 0 (delta 0)
(略)

できました。先ほどまで出ていたエラーメッセージが嘘のようです。権限が変更されたので当たり前ですが。

以上、GitHubにpushできなかった話でした。
あまり起こりそうにないトラブルでしたが、もし同じエラーメッセージが出て苦しんでいる方がいましたら、参考にしてみてください。そして管理者さんに確認をお願いしてみてください。