GitHubでPushができない?
GitHubはソースコードの保存や管理、公開などができる「ソースコード管理サービス」で、世界中の人々が利用しています。GitHubは「Git」(ソースコードのバージョン管理ツール)を利用し、クラウド上で「リモートリポジトリ」機能を提供しています。
これにより、遠隔地にいる開発者同士が互いに「GitHub」を利用して効率よくソフトウェア開発を進めることができます。GitHubでは、ローカルで作成したリポジトリを「Push」という機能を使って、クラウド上にあるリモートリポジトリにアップロードしますが、Pushに失敗してしまうことがあります。
Pushができないと、作成したローカルリポジトリがリモートリポジトリに反映できないため、開発作業などに支障が来すことがあります。この記事では、GitHub上で正しくPushができない場合の原因と対処方法について解説します。
リポジトリとは
GitHubのリポジトリ(repository)は、ファイルやディレクトリを保存し、記録しておく場所を意味します。また、ファイルやディレクトリの変更履歴は必要に応じてリポジトリに記録することができます。
リポジトリには、ローカルリポジトリとリモートリポジトリの2種類があります。それぞれ解説します。
▪ローカルリポジトリ ローカルリポジトリは、自分のコンピュータ内に存在するGitリポジトリです。作業を記録するために使用し、他のユーザと共有することはできません。
リモートとローカルにそれぞれリポジトリを分けることで、通常の作業ではローカルリポジトリを使い、自分のローカルリポジトリでの作業結果を公開したい場合には、リモートリポジトリに作成や修正したファイルをアップロードし、公開します。
▪リモートリポジトリ GitHub上のサーバに配置されるGitリポジトリです。ローカルリポジトリの変更を保存したり、他のユーザと共有したりするために使用します。
前提条件
以下の前提条件を満たしていることが、原因究明と対処の前提となります。まずは前提条件を満たしているかを確認してみましょう。
・GitHubアカウントを持っていること ・Gitのダウンロードとインストールが済んでいること ・ローカルにGitリポジトリをクローニングしていること ・PushしたいブランチがHEADブランチであること ・変更についてコミット済みであること
【参考】:Join GitHub | GitHub 【参考】:Git - Downloads
GitHubでPushできない原因と対処法
GitHubでPushできない場合、いくつかの原因が考えられます。ローカルリポジトリのPushができない原因としてありがちなものについて挙げながら、その対策を紹介していきます。以下に挙げる解説を参考にして、トラブルシューティングに活用してみてください。
SSHキーの設定が正しくない
SSHキーが正しく設定されていない場合、GitHubへの接続がうまくいかず、Pushに失敗することがあります。以下の手順でSSHキーの設定を確認・設定してみましょう。
【SSHキーを確認する】 ①ローカルコンピュータで、以下のコマンドを実行します。
> git ssh -v
②出力結果に「ssh-rsa」と表示されれば、SSHキーが生成されています。 ③表示されない場合は、SSHキーを生成する必要があります。
【SSHキーの生成方法】 ①ローカルコンピュータで、以下のコマンドを実行します。
> ssh-keygen
②パスフレーズの設定を求められますが、特に設定しなくても構いません。Enterキーを押して進みます。 ③生成されたSSHキーは以下の2つのファイルに保存されます。
・id_rsa:秘密鍵(公開鍵とペアで使用する鍵です。厳重に管理しましょう。) ・id_rsa.pub:公開鍵(GitHubに登録する鍵です。)
【SSHキーの登録】 ①GitHubにアクセスし、自分のリポジトリを開きます。 ②設定タブをクリックし、「SSHとHTTPS」を選択します。 ③「SSHキーの追加」ボタンをクリックします。 ④「タイトル」に任意の名前を入力します。 ⑤「鍵」欄に、id_rsa.pubファイルの中身をすべてコピーして貼り付けます。 ⑥「SSHキーの追加」ボタンをクリックして登録を完了します。
リモートリポジトリのURLが間違っている
リモートリポジトリのURLが間違っていると、Push先の場所を間違えてしまい、Pushに失敗することがあります。以下の手順でリモートリポジトリのURLを確認・設定してみましょう。
【リモートリポジトリのURLの確認】 ①ローカルコンピュータで、以下のコマンドを実行します。
>git remote -v
②出力結果にリモートリポジトリのURLが表示されます。 ③これが正しいURLであることを確認してください。
【リモートリポジトリのURLの設定】 PushリモートリポジトリのURLが間違っている場合は、以下のコマンドを実行して修正します。
>git remote set-url origin <正しいURL>
※<正しいURL>には、正しいリモートリポジトリのURLを貼り付けてください。
ブランチが同期されていない
ローカルブランチとリモートブランチが同期されていない場合、Pushに失敗することがあります。以下のコマンドを実行して、ローカルブランチとリモートブランチを同期してみてください。
>git pull origin master
権限がない
リモートリポジトリへのPush権限がない場合、Pushに失敗することがあります。リポジトリの所有者にPush権限を付与してもらう必要があります。
その他
上記以外にも、ネットワークの問題や、ファイルのロックなど、さまざまな原因でPushに失敗することが考えられます。問題が解決しない場合は、以下の情報を調べてみることをおすすめします。
原因究明の参考にしたい情報
GitHubに関わらず、システムトラブルの原因究明でヒントとなる情報はいくつかあります。Pushに関するトラブルに遭遇した際には、以下に挙げる情報を確認しながら、自分でトラブルシューティングをしてみましょう。
エラーメッセージから探る
GitHubでPushができない場合は、さまざまなエラーメッセージが表示され、エラーメッセージから原因の絞り込みができます。以下に、代表的なエラーメッセージとその原因、解決策をいくつか紹介します。
【参考】:リポジトリに関するドキュメント - GitHub Docs
1."error: failed to push some refs to <remote-url>" 原因:ローカルリポジトリとリモートリポジトリの間に競合が発生している可能性があります。 解決策:git pull コマンドを実行して、リモートリポジトリの最新情報を取得します。競合が発生している場合は、git merge または git rebase コマンドで解決します。
2."remote: Permission to
3."error: pushing to a non-bare repository. Either use 'git push --mirror' or 'git push -f'" 原因:Push先のブランチが保護されている可能性があります。 解決策:git push --mirror または git push -f オプションを使用して、強制的にPushします。
4."You are not authorized to do that." 原因:GitHubへの認証情報が間違っている可能性があります。 解決策:ユーザ名とパスワード、またはSSHキーが正しいことを確認します。
5."Everything up-to-date" 原因:すでに最新の状態に更新されています。 解決策:特に問題ありません。
公式ドキュメントを参照する
GitHubの公式ドキュメントは、GitHubの開発チームによって作成されており、常に最新の情報が提供されています。そのため、非公式の情報源よりも信頼性の高い情報を得ることができます。
また公式ドキュメントでは、一般的なトラブルから高度な問題まで、幅広いトピックについて解説されており、問題解決の手順だけでなく、原因の分析方法や予防策についても知ることができます。
【参考】:GitHub Documentation 【参考】:Gitードキュメンテーション
GitHubのフォーラムを参照する
GitHubのフォーラムには、世界中のユーザが集まっており、さまざまな問題について議論しています。同じ問題を抱えているユーザを見つけることができ、解決策を共有したり、一緒に原因究明をしたりすることができます。
またフォーラムには、初心者から上級者まで、さまざまなレベルのユーザが参加しています。そのため、幅広い知識と経験に基づいたアドバイスを得る機会を得られます。ただし、GitHubの公式フォーラムに参加するにはGitのアカウントが必要です。
【参考】:Discussions|GitHub
GitHubのトラブルシューティングに強くなろう
ここまで、GitHubでローカルリポジトリのPushに失敗する原因と対策をテーマに解説しました。システム開発中にこうしたエラーにぶつかると、解決が難航することがありますが、トラブルは冷静に原因を追求してみると、意外にシンプルなミスが原因であることが多いものです。
また、トラブルシューティングは自ら行うことで勘所が分かるようになり、スキルアップにも繋がります。今回の記事を参考に、トラブルシューティングに強いエンジニアを目指しましょう。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから