git pushが通らなかった話 (毎日日記を書く ~61日目~)
DCXです。ねづっちがプログラマーだった世界線。
「大阪」とかけまして「ゼロ除算」とときます。その心は、どちらも「きんき(近畿、禁忌)」でしょう。
「今年は寒い日が多い」とかけまして「配列外を参照してしまった」とときます。どちらも、「れいがい(冷害、例外)」が発生するでしょう。
「null」とかけまして
(謎かけの第1引数がnullだったため、NullPointerExceptionが発生し強制終了)
本日のテーマはgit pushがうまくいかないときの対策です。
SSHの公開鍵の設定
9月、自分は研究室に雇われてアルバイトという形で、研究室が主催する研究のデモ発表みたいなので使うプログラムの開発をしていました。昨日、そのプログラムが無事完成を迎えまして、先生に報告したら「あとはgitにpushして、プログラムの簡単な説明を書いといて」みたいなことを言われまして。gitは大学の授業とかで少し使ったことがあって基本的なコマンドとかは理解しているつもりだったので、「すぐ終わるな」と思ってました。まず
git remote set-url
でリモートリポジトリを変更して、そこからはいつも通り
git add -A
git status
git commit -m "first commit"
git push
HAHA。簡単だね。と思ってたらなぜかpushに失敗。こんなメッセージが出てきました。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s.
Please contact your system administrator.
Add correct host key in /home/foo/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/foo/.ssh/known_hosts:3
Host key for github.com has changed and you have requested strict checking.
Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
なんか大文字で出てきて、ただ事でない雰囲気が出てます。ですが心配はいりません。これは、
SSH接続のキーの設定がない
ことが原因で起こっているだけです。適切な処理をすれば解決できますよ。こちらのサイトなんかが参考になります。
SSHの公開鍵を作成して、Githubのサイトで登録するだけ。
これだけで前と同じようにgitを使えますよ。
リモートリポジトリにローカルにない変更がある
ちなみに、他の原因でgit pushができないことも一回あったので共有しておきます。その時の原因は
リモートリポジトリにローカルにない変更を加えたから
でした。"rejected"が入った赤文字のエラーメッセージが出ました。
gitはローカルリポジトリの変更をリモートリポジトリに反映させるものなのでリモートリポジトリの方に、ローカルにない変更を加えた場合はエラーになります。このときは、以下のサイトにあるように、git fetchを実行したあと変更点をマージすることで、またpushできるようになります。
自分はリモートリポジトリの方で新しくREADME.mdを作成していたのでこのエラーが起こったと思われます。
もし、このときリモートとローカルで同じファイルに別の変更をしてしまった場合、"conflict"と呼ばれる事態が発生します。どちらの変更を反映してpushするかを選ばないといけません。このサイトあたりが参考になるでしょうか。
というわけで、本日はGitでpushがうまくいかない際の解決策についてでした。SSHの公開鍵については、特に見落としやすいポイントだと思いますので、参考になりましたら幸いです。それではまた。