
あるGitのリモートリポジトリを別のサーバーのリポジトリに移行する方法
概要
ある案件にて、とあるサーバーにあるGitのリモートリポジトリを別のサーバーにこれまでのコミット履歴ごとコピーして欲しいという依頼がありました。
ここではそのやり方の手順を説明します。
このやり方で移行すれば過去のデータの蓄積もあるので指定のタイミングのデータを取り出すことができます。
なお、今回はGitのサービスはヌーラボのBacklog、ツールはTortoiseGitで行いましたのでその時のキャプチャ画面を元に説明します。
違うサービスやツールを使う場合は適宜読み替えてください。
手順
移行元のGitのリモートリポジトリからHTTPSのURLをコピー
移行元のGitのリモートリポジトリ(ここでは「Git_A」とします)からHTTPSのURLをコピーします。
URLは「~.git」となっているはずです。
BacklogならプロジェクトからGitを選択し、クリップボードのアイコンをクリックすればできます。

ローカルリポジトリを作成
ローカルにフォルダを作成して「Git_A」のリモートリポジトリのURLからGitをクローンしてローカルリポジトリを作成します。
この例では「local_git」というフォルダを作成して右クリックから「Git クローン(複製)」を選択します。
「Git ここにリポジトリを作成」ではないので注意。

Gitクローンの設定
Gitクローンのダイアログでは「URL」には先程クリップボードにコピーしたURL(ここでは「Git_A」の)を貼り付けます。
「ディレクトリ」は選択したフォルダ(ここでは「local_git」)のパスになるようにします。
問題なければ選択したフォルダがローカルリポジトリになります。

移行先のリモートリポジトリを作成しURLをコピー
移行先のGitのリモートリポジトリを作成(ここでは「Git_B」とする)し、HTTPSのURLをコピーします。
作成されてからデータがまだ入っていない状態にしておきます。

ローカルリポジトリの設定
作成したローカルリポジトリ(ここでは「local_git」)のフォルダで右クリックしてGitの設定を呼び出します。
設定ウィンドウの左側の「Git」を選択し、右の項目から「ローカルリポジトリ設定を編集」ボタンを押します。

エディターでURLを編集
エディターの編集画面が出るので「url」の内容を移行元(Git_A)のURLから移行先(Git_B)のURLに書き換えて保存して終了します。
これでこのローカルリポジトリのリモートリポジトリは移行先に変更されます。

リモートリポジトリにPushする
この時点でローカルリポジトリ(local_git)のリモートリポジトリは移行先(Git_B)ですが、データの内容(履歴含む)は移行元(Git_A)のリモートリポジトリそのものとなっています。
ローカルリポジトリ(local_git)のフォルダで右クリックして
TortoiseGit - プッシュ を選択してリモートリポジトリ(Git_B)にPushします。
Gitコミット -> "master" ではないので注意。
移行完了!
これで移行元のリモートリポジトリ(Git_A)の内容を持つローカルリポジトリ(local_git)の内容が移行先のリモートリポジトリ(Git_B)に反映されます。
つまり、コミット履歴含む移行元のすべてのデータが新しい移行先のリモートリポジトリに複製されます。

お疲れさまでした!
これで移行元と寸分違わぬ新しいリモートリポジトリが作成されました。
今後はこのリモートリポジトリもローカルリポジトリも今まで通り普通に使用することができます。