はじめに
最近、大学入学時くらいに作成しただけしておいたgithubのアカウントをなんとかせにゃならんな~、と唐突に思った。
あとついでにDockerの知識確認もしたかったから、試しにDockerを使ってNext.jsのサンプルアプリでも立ち上げて、git push origin main
してみたところ、記事タイトルのエラー発生。
しばらくハマったので戒めのために書いておくことにする。
環境
- OS: Linux(KDE neon 5.23.5)
- git version: なんか.22とか.23くらいの古いやつだったはず
発生したエラー
たしか下記の2つ。
fatal: Authentication failed for 'https://github.com/{your user name}/{your repository name}.git'
error: src refspec {your branch name} does not match any.
原因
原因は多分下の2つ。多分。
- push時に用いるgithubのパスワードが、アクセストークンとやらに変わっていた
- ローカルとリモートでブランチ名が違っていた(masterとmain)
超初歩的でくだらないミスなので恥ずかしい限り。
解決方法
アクセストークンを取得する
パスワードの代わりに使用することになったアクセストークンとやらを取得する必要がある。
これはgithubのSettingsページから取得可能。
アカウントのSettingsページ
へ行ったら、サイドバーにあるDeveloper settings -> Personal access tokens
へ。
Personal access tokens
へ行ったら、Generate new token
で新しくトークンを発行できる。
なにやら色々設定項目があるけども、それぞれ多分以下のような感じ。
- Note: トークンの使用目的(多分適当でいい)
- Expiration: トークンの有効期限(リポジトリに触りそうな期間を目安で設定すればよさそう)
- Select scopes: トークンに付与されるアクセス権限の設定(適当にrepoとdelete_repoにチェック)
はい。どうやらこれでGenerateして出てきたトークンをコピペして使用すればいいのかな。
ただネットで調べた感じ、いちいち長ったらしいトークンを入力するのは面倒って人が多いっぽい。
おまけにトークンは生成時に表示されるページで一度しか確認できないみたいだから、どこかに控えなくちゃいけない。
これが面倒な人は、ローカルのgitに登録するリモートURLに、トークンを追加してあげればいいみたい。
書き方は以下の通り。
[remote ""origin]
url = https://{access token}@github.com/{your user name}/{your repository name}.git
意外と単純。
ただこの方法は将来的に場合によってはセキュリティ的な問題になりやすいみたいだから、注意が必要かも。
個人で遊ぶ分にはまあどうってことなさそうではあるから、自分は気にしないけど。
gitのブランチ名をmasterからmainに変更する
「githubのデフォルトがmainになったんだからgitも対応してくれよ(あるいは逆)」とは思ったけど、してくれないからとりあえず自分でブランチ名を変えるしかない。
これも単純で、ターミナルに以下のコマンドを打ち込めばいい。
git branch -m {old branch name} {new branch name}
#現在のブランチ名を変えたいなら引数短縮できて
git branch -m {new branch name}
今回だとmasterをmainに変えたいってことだったから、git branch -m master main
とした。
これで多分エラーは出なくなると思う。一件落着。
「いちいちgit init
するたびに名前変えるのダルいな!」と思って、デフォルトのブランチ名変えようしたらハマった話もそのうち書くかも。
おわりに
今回引っかかった原因は、どちらも情報としてはキャッチアップしてたのに、実際に手元で確認したり対応していないものだった。
特にgithubのデフォルトブランチ名がmasterからmainになる話なんかは結構大きかったから、やっぱりサービスの提供元からなにか大きな変更が発表されたら、しっかりとそれに対応しなくちゃいかんなー、とかなんとか。
とにかく今後こんなたわけたミスをしないように、情報には敏感に、対応は素早くを心がけたい所存。
あと、もう少し定期的にqiitaとかgithubとか更新しないとせっかく登録したのにもったいないから、そこもなんとかせねば。