🦔
Git リポジトリの複製
概要
Gitの履歴を保持したまま、別リポジトリにコピーする方法です。
まず、元のリポジトリをミラーでクローンし、次にリモートURLを新しいリポジトリに変更し、最後に変更を新しいリポジトリにプッシュします。
手順
新しいリポジトリの作成 (GitHub、codeCommit上)
ミラークローン
git clone --mirror https://github.com/user/original_repo.git
cd original_repo.git
リモートURLの変更
git remote set-url origin https://github.com/user/new_repo.git
プッシュ
git push --mirror origin
詳細
-
新しいリポジトリの作成
移行先のGitHubやcodeCommitで新しいリポジトリを作成します。 -
ミラークローン
元のリポジトリをミラーでクローンします。
これにより、すべてのブランチとタグを含む完全な履歴がコピーされます。
下記のコマンドを実行すると<リポジトリ名>.gitディレクトリが作成されます。
git clone --mirror <元のリポジトリのURL>
- リモートURLの変更
クローンしたリポジトリの.gitディレクトリに移動し、リモートURLを新しいリポジトリに変更し
ます。
# 移動
cd <クローンしたリポジトリ名>.git
# リモートurlの変更
git remote set-url origin <新しいリポジトリのURL>
# 変更できたか確認
git remote -v
- プッシュ
変更を新しいリポジトリにプッシュします。
ミラープッシュを使用すると、すべてのブランチとタグが新しいリポジトリにコピーされます。
git push --mirror origin
補足
--mirror オプションの意味は、ローカルリポジトリのすべての参照(refs)をリモートにそのままミラーリングするということです。つまり、ブランチ、タグ、リモート追跡ブランチなど、refs/ 以下のすべてを一括でプッシュします。
※ プロジェクトの /.git/refs/ ディレクトリ
ミラークローンは、ローカルリポジトリを一旦作成し、それをリモートにプッシュする形式で、履歴を保持したまま移行する方法です。
既存のローカルリポジトリがある場合は、リモートURLを新しいリポジトリに変更することで、既存のローカル環境を新しいリポジトリに紐づけることができます。
移行元と移行先のブランチ名が異なる場合は、マージやリネームなどの操作が必要になる場合があります。
Discussion