【Git】リポジトリを別のGitに移行するには

■ はじめに

あるプロジェクトで管理していたGithubのリポジトリを
別のGithubのリポジトリに移動する必要がでてきたので
調べてみた。

目次

【0】移行方法
【1】--mirrorオプションを使用する方法
 1)手順
 2)サンプル
 3)補足1:--mirrorオプションについて
【2】リポジトリのpush先を変更する方法
 1)手順
 2)サンプル
 3)補足1:リモートURLについて
【3】トラブル

【0】移行方法

https://tsujitaku50.hatenablog.com/entry/2017/01/08/200155

より、以下の方法が考えられる。

1)--mirrorオプションを使用する方法
2)リポジトリのpush先を変更する方法
3)公式ドキュメントに沿って移行する方法

【1】--mirrorオプションを使用する方法

* 調べると真っ先に出てくる方法。

1)手順

Step1: 移行元リポジトリをローカルにミラークローンする
Step2: クローンしたディレクトリに移動する
Step3: Step1を移行先Gitリポジトリへpushする

2)サンプル

移行ケース

* 移行元リポジトリURL
 => https://github.com/source/your-repository1.git

* 移行先リポジトリURL
 => https://github.com/destination/your-repository2.git

コマンド例

# Step1: 移行元リポジトリをローカルにミラークローンする
# git clone --mirror <移行元GitリポジトリURL>
git clone --mirror https://github.com/source/your-repository1.git

# Step2: クローンしたディレクトリに移動する
# => cd <repository>
cd your-repository1.git

# Step3: Step1を移行先Gitリポジトリへpushする
# git push --mirror <移行先GitリポジトリURL>
git push --mirror https://github.com/destination/your-repository2.git

3)補足1:--mirrorオプションについて

ミラーリポジトリを作成する

ミラーリポジトリとは?

* ワーキングディレクトリが存在しないリポジトリで
 更新履歴やタグなどといったGit情報のみを保持しているリポジトリ

ベアとの違い
https://git-scm.com/docs/git-clone/ja

より抜粋
~~~~~
--bare と比較して、 --mirror は、
ソースのローカルブランチをターゲットのローカルブランチに
マップするだけでなく、すべての参照
(リモートトラッキングブランチ、メモなどを含む)をマップし、
ターゲットリポジトリの git remote update によって
これらのrefがすべて上書きされるようにrefspecの設定を行います。
~~~~~
=> 分かったようなわからないような、、、

【2】リポジトリのpush先を変更する方法

* 今回は、メインブランチのみ移行するものとする
 => ブランチなど全てを移行したい場合は、以下のURLを参照のこと

https://tsujitaku50.hatenablog.com/entry/2017/01/08/200155

1)手順

Step1: 移行元リポジトリをcloneする
Step2: pushする先を変更する
Step3: Step1を移行先Gitリポジトリへpushする

2)サンプル

# Step1: 移行元リポジトリをcloneする
# git clone <移行元GitリポジトリURL>
git clone https://github.com/source/your-repository1.git

# Step2: pushする先を変更する
cd your-repository1

# => git remote set-url origin <移行先GitリポジトリURL>
git remote set-url origin https://github.com/destination/your-repository2.git

# 変更できたかどうか確認(移行先ならOK)
git remote -v
origin  https://github.com/destination/your-repository2.git (fetch)
origin  https://github.com/destination/your-repository2.git (push)

# Step3: Step1を移行先Gitリポジトリへpushする
# git push <移行先GitリポジトリURL>
git push https://github.com/destination/your-repository2.git

3)補足1:リモートURLについて

* リモートリポジトリ(e.g. github上のリポジトリ)のURL

リモートURLの確認

$ git remote -v
origin  https://github.com/xxxxx/hello-world.git (fetch)
origin  https://github.com/xxxxx/hello-world.git (push)

リモートURLを変更

$ git remote set-url origin <変更先URL>

【3】トラブル

* 以下にまとめておく。

Git 移行時におけるトラブル
https://dk521123.hatenablog.com/entry/2022/02/02/000000

参考文献

https://pasomaki.com/git-move/
https://qiita.com/orange5405/items/783b74667bcc69a34a52
https://howpon.com/6427
https://tsujitaku50.hatenablog.com/entry/2017/01/08/200155
https://qiita.com/ysti/items/be67a6e3c5754fac088a

関連記事

Github ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/07/18/234652
Github の リモート先が変更した際の対応
https://dk521123.hatenablog.com/entry/2021/02/04/141854
リポジトリを別のGitに移行するシェル
https://dk521123.hatenablog.com/entry/2023/02/15/173618
Git 移行時におけるトラブル
https://dk521123.hatenablog.com/entry/2022/02/02/000000