見出し画像

git cloneしたリポジトリを別のリモートリポジトリに移行する

挨拶・背景

お初にお目に掛かります、SHIFT アジャイル2Gのyasudaです。
SHIFTには22新卒として入社し、現在は開発支援プロダクト推進部にてTech Boost研修に参加しております。

私は現在、アプリケーションの設計から実装までを広く学んでおります。
その中で、表題のようにgit cloneしたリポジトリをリモートリポジトリにpushする機会が多々あるのですが、自分の勉強不足から毎度手順を忘れては時間をロスしているので、備忘録且つ自戒も込めて、この機会に技術記事としてoutputすることで、同じような悩みを抱えている方の時間短縮に貢献できればと思い執筆しました。

|想定している対象読者

  • 表題の目的を実行したいが、何をすればいいか分からない人

  • 表題について、ググっても問題が解決しなかった人

  • Gitの仕組みは理解していないが、概念を理解する時間はなく、表題の目的のみ素早く遂行したい人

  • gitコマンドを内部の動きまで含めて理解したい人

  • たまたまこの記事を読んだ人

|目的を遂行したい人のためのCLI手順

  1. "git clone リポジトリAのurl"でリポジトリを新しいディレクトリに複製する。

  2. 上記で作成したディレクトリに移動し、"git remote -v"で.git/configの中身をざっくり確認する。

  3. "git remote set-url origin リポジトリBのurl"でoriginに設定されたリモートリポジトリをBに変更する。

  4. "git remote show origin"で変更が反映されているか再度確認。

  5. 削除されたリモートブランチのリモート追跡ブランチが、ローカル上の"refs/remotes/origin/ "配下に残ってしまっている場合、"git remote prune origin" を実行してそれらを削除する。

  6. "git branch -a"で現在のリモートブランチとローカルブランチを再度確認する。("git remote show origin"でも可能)

  7. "git push origin ローカルブランチ名"する。

|手順解説

1."git clone リポジトリAのurl"でリポジトリを新しいディレクトリに複製する

実はこのデフォルトで行われる動きは、.gitフォルダ内の"refs/remotes/origin"の配下に、今いるリモートブランチの最新の変更点(commit)への参照を作成し、"remote.origin.url"と"remote.origin.fetch"設定変数を初期化することによって実行されます。

2."git remote -v"で.git/configの中身をざっくり確認する

この際、"origin git@~.git (fetch)" "origin git@~.git (push)"のような記載が出力されるので、これで「originにどのリモートリポジトリのurlが登録されているのか」を確認することが出来ます。
※originとは、リモートリポジトリのデフォルト名(エイリアス)です。

3."git remote set-url origin リポジトリBのurl" でoriginに設定されたリモートリポジトリをBに変更する

この際、内部では.git/config内の該当箇所の記載を変更しています。
.git/configを直接いじる方法もありますが、無効な設定をしてしまうリスクを考えると、1コマンドで済むこちらの方が最初は安全かと思われます。

4."git remote show origin"で変更が反映されているか再度確認する

先程は"git remote -v"で、「originにどのリモートリポジトリのurlが登録されているのか」を確認しましたが、今回は"git remote show origin"コマンドを入力することで前述した確認事項に加えて、「リモート上の削除されたブランチがローカルに残っているかどうか」を確認します。

5.削除されたリモートブランチのリモート追跡ブランチが、ローカル上の"refs/remotes/origin/ "配下に残ってしまっている場合、"git remote prune origin" を実行してそれらを削除する。

これによって、内部で"git fsck --unreachable"が動き、.git内のオブジェクトの接続性と有効性を検証してくれ、"--unreachable"オプションにより、存在するものの、どの参照ノードからも到達できないオブジェクトを削除してくれます。

6."git branch -a"で現在のリモートブランチとローカルブランチを再度確認する("git remote show origin"でも可能)


7."git push origin ローカルブランチ名" を実行する

これで新しいリモートリポジトリ内に現在のローカルブランチ名のブランチが作成され、git cloneしたリモートリポジトリAからリポジトリBへの移行が完了します。


最後に

今回は上記のような手順を踏むことで表題の達成を検討しましたが、各人の状況に応じて目的達成までの手順は変わってくると思います。

上記の方法以外にもミラーリングを用いて、リポジトリを移動させるなどの方法もありますので、各自で比較検討して頂けると幸いです。

この記事を最後まで読んだ方は是非、ハートボタンからいいねをお願いいたします。

ご清覧ありがとうございました。

参考文献


執筆者プロフィール:Yutaro Yasuda
22新卒としてSHIFTに入社。趣味は散歩、読書、食事。愛用座布団はtempur.

お問合せはお気軽に
https://service.shiftinc.jp/contact/

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/