Gitリポジトリの移行

プログラミング

コマンド

移行

git clone --mirror <SOURCE_REPOSITORY_URL> 
cd <REPOSITORY> 
git push --mirror <DESTINATION_REPOSITORY_URL>

リモートリポジトリに初めてアクセスする際にGit Credential Managerがアクセスを求めるので、ブラウザ経由で許可します。

リモートリポジトリ変更

ローカルリポジトリに移動し、push するリモートリポジトリのURLを変更します。

git remote set-url origin <DESTINATION_REPOSITORY_URL>

ログ

移行の全ログ

$ git clone --mirror <SOURCE_REPOSITORY_URL> 
Cloning into bare repository '<REPOSITORY_NAME>.git'... 
git: 'credential-manager' is not a git command. See 'git --help'. 
The most similar command is 
        credential-manager-core 
remote: Enumerating objects: xxxx, done. 
remote: Counting objects: 100% (xxxx/xxxx), done. 
remote: Compressing objects: 100% (xxxx/xxxx), done. 
remote: Total xxxx (delta xxxx), reused xxxx (delta xxxx), pack-reused 0 
Receiving objects: 100% (xxxx/xxxx), xxxx MiB | xxxx MiB/s, done. 
Resolving deltas: 100% (xxxx/xxxx), done. 
$ cd <REPOSITORY_NAME>.git/ 
$ git push --mirror <DESTINATION_REPOSITORY_URL>
warning: ----------------- SECURITY WARNING ---------------- 
warning: | TLS certificate verification has been disabled! | 
warning: --------------------------------------------------- 
warning: HTTPS connections may not be secure. See https://aka.ms/gcmcore-tlsverify for more information. 
warning: ----------------- SECURITY WARNING ---------------- 
warning: | TLS certificate verification has been disabled! | 
warning: --------------------------------------------------- 
warning: HTTPS connections may not be secure. See https://aka.ms/gcmcore-tlsverify for more information. 
git: 'credential-manager' is not a git command. See 'git --help'. 
The most similar command is 
        credential-manager-core 
Enumerating objects: xxxx, done. 
Counting objects: 100% (xxxx/xxxx), done. 
Delta compression using up to 8 threads 
Compressing objects: 100% (xxxx/xxxx), done. 
Writing objects: 100% (xxxx/xxxx), xxxx MiB | xxxx MiB/s, done. 
Total xxxx (delta xxxx), reused xxxx (delta xxxx), pack-reused 0 
remote: Resolving deltas: 100% (xxxx/xxxx), done. 
To <DESTINATION_REPOSITORY_URL>
 * [new branch]      develop -> develop 
.
.
.
 * [new branch]      master -> master 
 ! [remote rejected] refs/pull/1/head -> refs/pull/1/head (deny updating a hidden ref) 
error: failed to push some refs to '<DESTINATION_REPOSITORY_URL>'

git: 'credential-manager' is not a git command. See 'git --help'.

https://tamurat.com/git-credential-manager-is-not-a-git-command-see-git-help-1

[remote rejected] refs/pull/1/head

プルリクエストは参照のみで更新することができないようです。そのため、移行後にはプルリクエストは存在しません。プルリクエストが存在しない以外には問題ないようです。このエラーを出したくないはプルリクエストなしでミラーする必要があります。

参考

【Git】コミット履歴込みでリポジトリの移行を行う。(Git to Git) - Qiita
https://qiita.com/msht0511/items/467a0cbffb4fed60f885

Gitリポジトリを別のGitサーバーに移行する - Qiita
https://qiita.com/orange5405/items/783b74667bcc69a34a52

他のGitからGitHubへ移行する方法 - Qiita
https://qiita.com/ponsuke0531/items/43464e8c8515c56a2cc7#refspull%E3%81%A7remote-rejected%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%8C%E5%87%BA%E3%81%A6%E3%82%82%E6%B0%97%E3%81%AB%E3%81%97%E3%81%AA%E3%81%84%E3%81%A7%E3%81%84%E3%81%84%E3%81%A8%E6%80%9D%E3%81%86