みなさん開発をやっていたらGitを使っていることが多いと思います。
そして多くの組織、人は Git のサービスとして Github や Gitlab を使っていると思います。
Github と Gitlab の違いに関しては以下の記事で簡単な説明をしているので、興味のある方はぜひ参考にしてください!
その場合にGithubで最初は使っていたが、Gitlabに移行したい、もしくはその逆の移行をしたいと考えたことがある人が多いのではないでしょうか?
自分もそのように考え、実際に移行をしたので今回は Github と Gitlab のサービス間のリポジトリの移行の方法を紹介します。
GithubとGitlab間でリポジトリを移動させる方法
今回自分が実施したのは Github から Gitlab への移行だったので、サンプルのコマンドもそれに添ったコマンドになっています。
必要に応じて適宜読み替えていただけたらと思います。
また自分が実施した方法はすでに移行元のリポジトリはクローン済みかつ開発も進んでいました。
今後も同じディレクトリで開発を実施したかったので、新しくディレクトリの作成やリポジトリのクローンをしたくありませんでした。
そのため移行元のリポジトリを新しくクローンして移行を実施しようとしている方には少し非効率な方法になっています。
※非効率とは言っても作業時間としては数分程度の違いしかないので誤差だと思います。
移行先のリポジトリを作成する
まずは移行先の Git サービスにリポジトリ(プロジェクト)を作成する必要があるので作成します。
すでにリポジトリがある場合はこの手順はスキップして問題ありません。
今回の場合は移行先のリポジトリは Gitlab であるため Gitlab に新しいリポジトリを作成しました。
リポジトリの作成方法がわからない人は以下の記事にリポジトリの作成方法が書いていますので参考にしてください。(下記記事では Gitlab で作成をしています。)
作成が完了したら、次のステップに移ります。
移行元のリポジトリをクローンする
次に移行元のリポジトリを自分のローカル環境にクローンします。
今回の場合ですと、Github から Gitlab に移行するので、ここでは Github のリポジトリをローカルにクローンしました。
すでにクローンされている場合は再度クローンする必要はありません。その代わりにブランチを main (master) に変更し最新のコードを Pull してください。
新しくディレクトリを作成してクローンしても全く問題はありません。
まずは任意のコマンドラインツールを開きます。
Mac だとTerminal 、Windows だと Gitbash、コマンドライン、Powershell とかになると思います。
コマンドラインツールを開いたら任意のディレクトリに移動します。
移動したらリポジトリをクローンします。
クローンのコマンドは以下です。
git clone {URL}
URL の取得方法は Git サービスのリポジトリに入って取得することが可能です。
Github のリポジトリの clone 用 URL を取得する方法
リポジトリに入って <>Code タブの右上に Code というボタンがあるのでそこからコピーします。
Gitlab のリポジトリの clone 用 URL を取得する方法
Gitlab の場合も同様に Gitlab のリポジトリに入って、右上にある Cloneからコピーします。
HTTPS と SSH のどちらがいいのか?
Github と Gitlab どちらの場合でも HTTPS と SSH は任意の方を選んで問題ありません。ただ SSH の場合は SSH 認証の設定をしている必要があります。
SSH 認証をしている方がよりセキュアなので、今でなくても実施している方が無難です。
SSH 認証の方法は以下の記事にまとめているので、設定がまだの人は参考に設定をしていただけたらと思います。
URLが取得できたら以下のコマンドを実行します。先ほど記載したコマンドと同じです。
git clone {URL}
実際には以下のようになると思います。
SSH の場合↓
git clone git@github.com:xxxxxxxxxxxxxxxxxxxx
HTTS の場合↓
git clone https://github.com/xxxxxxxxxxxxxxxxxxxx
移行先のリポジトリを追加する
移行元のリポジトリの追加が完了したら、移行先のリポジトリを追加します。
普通に移行先のリポジトリを追加しようとしても、originはすでに移行元のディレクトリの名前になっていて競合するため使えません。
今回は今後も同じディレクトリで開発をしたいため、移行元のリポジトリの名前を変更する方法で作業を実施しています。
そうすることでこれまで通りgit push origin feature/hogehogeのような基本的なコマンドを使っても移行先のリポジトリにプッシュしてくれます。
ですのでまずは移行元のリポジトリの名前を変更します。
移行元のリポジトリの名前を変更する方法
リポジトリの名前を変更するには以下のコマンドを実行します。
今回は移行元のoriginをsource-originに変更します。
git remote rename origin source-origin
これで名前の変更が完了しました。
正しく変更されているかを確認したい場合は以下のコマンドを実行してください。
git remote -v
上記の画像は自分の場合はすでに次の作業に進んでいて、originが表示されていますが、気にしないでください。
赤枠で囲った部分(移行元のリポジトリ)の名前がsource-originになっていたら問題なしです。
移行先のリポジトリを追加する方法
名前の変更が完了したら移行先のリポジトリを追加します。
追加するためには移行先のリポジトリの URL を取得する必要があります。取得の方法はクローン手順の箇所で説明したように、移行先の Git リポジトリにログインして右上にある Code (Githubの場合)、Clone(Gitlabの場合)からコピーします。
今回の場合は移行先のリポジトリは Gitlab であったため、Gitlab からURLを取得してきました。
移行先のリポジトリを追加するコマンドは以下です。
git remote add origin git@gitlab.com:xxxxxxxxxxxxxxxxxxxx
上記コマンドを実行するだけで追加は完了です。
追加をしたら問題なく追加できているかを確認します。
実行するコマンドは名前の変更を確認した時と同じです。
git remote -v
問題なく origin に移行先である Gitlab の URL が設定されていますね。
これで追加の作業は完了です。
あとは移行先のリモートリポジトリに反映するだけです。
移行先のリポジトリへ反映(プッシュ)する
最後に移行先のリモートリポジトリにプッシュします。
プッシュの際はソースコードのプッシュとタグのプッシュを実施します。
ソースコードをプッシュする方法
プッシュのコマンドは普段からよく使っていると思うので特に問題ないと思います。
git push -u origin --all
オプションの意味は下記の通りです。
オプション | 意味 |
-u | 上流ブランチを設定する。–set-upstream の省略版のオプションです。 |
–all | 全てのブランチをプッシュする。今回はブランチも含めて全部移行するため設定しました。 |
実行すれば問題なくプッシュができると思います。
エラーが発生した場合は2つの可能性があります。
リポジトリの作成時にinitial commitを入れてしまった場合は強制プッシュが必要です。ですので以下のコマンドを実行します。
git push -f -u origin --all
SSH 認証で失敗している場合は認証の設定を入れる、もしくは移行先のリポジトリのURLをHTTPSに書き変える必要があります。
SHH 認証を設定する場合は以下の記事を参考にして設定してください。
HTTPS に変更する場合は、以下のコマンドを実行してリモートのURLを書き換えてください。
git remote set-url origin https://gitlab.com/xxxxxxxxxxxxxxxxxxxx
これで問題なくプッシュできると思います。
ただ HTTPS の場合はプッシュの際に毎回パスワード等を求められるので非常に手間です。しかもセキュリティ的にも SSH 認証には劣るので SSH 認証を設定して置くことをおすすめします。
続いてはタグのプッシュをします。
タグを移行先のリポジトリに反映(プッシュ)する
そもそもタグを作成していない場合はこの手順は不要です。
タグをプッシュする時のコマンドも普段使っているものと特に変わりありません。
下記のコマンドを実行してください。
git push -u origin --tags
オプションの意味は下記の通りです。
オプション | 意味 |
-u | 上流ブランチを設定する。–set-upstream の省略版のオプションです。 |
–tag | 全てのタグをプッシュする。 |
これで移行作業は完了です。
移行先のリポジトリに入って確認してください。
また今回はoriginを移行先のリポジトリに変更しているので、このままの設定で開発をしても、今後は移行先のリポジトリにしっかりとソースコードが反映されるようになっています。
まとめ
個人利用の場合 Github と Gitlab 最初は細かいことを考えず勢いで選ぶって人もいるのではないでしょうか?
そして開発を進めていく内に色々と理解が進んだりや実現したいことが明確になったりして、リポジトリを移行したいってなることは珍しくはないと思います。
ですので、リポジトリのサービス間の移行方法を覚えておいて損はないと思います。
皆様の快適な開発ライフの役にたちますと幸いです。
コメント