0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Git] "This repository moved" エラーが発生した際の対処方法

Posted at

In a nutshell

リモートリポジトリに git push した際,「This repository moved」というメッセージが出た場合は,GitHub上でリポジトリ名が変更されたことによるリダイレクトが原因である.このメッセージを回避し,今後も安定して操作を行うためには,git remote set-url コマンドで新しいURLに更新すれば良い.

はじめに

Gitを利用していた際に遭遇したエラーについて,備忘録として,以下に記述した.本記事で扱うのは,git push 時に表示された「This repository moved」というリダイレクトメッセージである.これについて原因の特定から対処法を記述した.特に,GitHubでリポジトリ名(特に大文字・小文字)を変更した場合にこのような現象が発生する.
但し,以下の記事について,ユーザー名はmy_USER_name,レポジトリ名はmy_REPO_nameとした.

予想される読み手

  • Git及びGitHubについて初学者である
  • Gitを実務で使い始めたが,まだエラー対応に不慣れである
  • リポジトリ名変更後に不穏なメッセージを見て戸惑った

生じた現象

Gitのリモートリポジトリへ push しようとしたところ,以下のようなメッセージが表示された.
最終的には正常にpushできているように見えるが,リダイレクトに関するメッセージは出力されている.

remote: This repository moved. Please use the new location:
remote:   git@github.com:my_USER_name/my_repo_name.git

原因

直接的な原因

リモートリポジトリのURLが変更されたため,Gitが旧URLから新URLへのリダイレクトを自動で行っていた.

git@github.com:my_USER_name/my_REPO_name.git # 旧URL
git@github.com:my_USER_name/my_repo_name.git # 新URL

※上記の通り,大文字・小文字の違い(REPO -> repo)が原因でGitHubが新しいURLにリダイレクトしていた.

間接的な背景

GitHub上では,リポジトリ名の大文字・小文字も区別されるが,URLとしては見た目が似ているため,変更されたことに気付きにくい.また,GitHubは旧URLから新URLへ自動でリダイレクトしてくれるが,ローカルのリモート設定自体は古いまま残る.

対処法

リモートリポジトリのURLを新しいものに更新する.

手順

  1. 現在のリモート設定を確認
git remote -v

出力例:

my_REPO_name  git@github.com:my_USER_name/my_REPO_name.git (fetch)
my_REPO_name  git@github.com:my_USER_name/my_REPO_name.git (push)
  1. 新しいURLに設定を更新
git remote set-url my_REPO_name git@github.com:my_USER_name/my_repo_name.git
  1. 再度確認
git remote -v

更新後の出力:

my_REPO_name  git@github.com:my_USER_name/my_repo_name.git (fetch)
my_REPO_name  git@github.com:my_USER_name/my_repo_name.git (push)

この状態になれば,以降のpush時にリダイレクトメッセージは表示されなくなる.

補足

なぜリモートURLの変更に気づきにくいのか

GitHubでは,リポジトリ名の変更を行っても旧URLからの自動リダイレクトが有効になるため,表面的には push/pull は成功する.しかし,以下のような問題が起こる可能性がある.

  • 毎回 push 時にリダイレクトメッセージが出てログが煩雑になる
  • チームメンバーが新しいURLを知らずに作業してしまう
  • CI/CDツールがリダイレクトを正しく処理できないことがある

リモート名も統一したい場合

もしリポジトリ名そのものを変更した場合,リモート名(originなど)もあわせて整理するとわかりやすい.これにより他のチュートリアルやツールの記述とも整合性が取れる.

git remote rename my_repo_name origin

その他

  • git remote show <リモート名> で,リモートの詳細(URLやトラッキング情報)を確認できる.
  • URLが変わった理由を確認したい場合は,旧URLにアクセスしてリダイレクトされるかをブラウザで確認するとよい.
  • GitHubではリポジトリ名変更の明示的な履歴は表示されないため,Issueやコミットログで背景を探るとよい.

Summary

  • GitHubでリポジトリ名を変更すると,旧URLは自動で新URLにリダイレクトされる.
  • しかし,ローカルの設定(git remote)は更新されない.
  • 不要なリダイレクトを避け,明確な管理を行うためには,git remote set-urlでURLを更新することが望ましい.

References

GitHub Docs - Repositories > Create & manage repositories > Renaming a repository

Git Documentation - Documentation > Reference > remote

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?